Python进阶——推导式
什么是推导式
- 推导式是python中创建和使用序列的简洁方式。
- 推导对象主要包括列表list,元组tuple,字典dict,集合set,字符串string。
列表推导式的具体用法
生成1,2,3,4,5…序列对应每个数的平方的新列表
- 没有列表推导式支持的情况下
myList = []
for num in range(1, 6):
myList.append(num ** 2)
print(myList)
# result:[1, 4, 9, 16, 25]
- 列表推导式方法
myList = [num ** 2 for num in range(1, 6)]
print(myList)
# result:[1, 4, 9, 16, 25]
生成1,2,3,4,5…序列中为偶数的平方的新列表
- 没有列表推导式支持的情况下
myList = []
for num in range(1, 6):
if num % 2 == 0:
myList.append(num ** 2)
print(myList) # result:[4, 16]
- 列表推导式方法
myList = [num ** 2 for num in range(1, 6) if num % 2 == 0]
print(myList)
# result:[4, 16]
列表推导式的具体用法
myString = [string for string in "记得点赞哦"]
print(myString)
# result: ['记', '得', '点', '赞', '哦']
- 也可以使用多重循环进行推导
- 没有列表推导式支持的情况下
result = []
for x in "abc":
for y in "12":
result.append(x + y)
print(result)
# result:['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
- 列表推导式方法
result = [x + y for x in "abc" for y in "12"]
print(result)
# result:['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
后续不在重复常规写法。
元组推导式的具体用法
那元组tuple怎么推导呢,直接的想法应该是:
myTuple = (num for num in range(1, 6))
print(myTuple)
# 结果却是:
# <generator object <genexpr> at 0x00000248A98BFD48>
很明显结果与我们想象的不同,python中小括号的推导式默认为生成器generator,正确的元组tuple推导式是用tuple函数包裹:
myTuple = tuple(num for num in range(1, 6))
print(myTuple)
# result: (1, 2, 3, 4, 5)
字典和集合推导式的具体用法
接下来是字典和集合的推导:
首先,字典的推导
myDict = {num: num**2 for num in range(1,6)}
print(myDict)
# result: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
再来,集合的推导
mySet = {num for num in "123abc123"}
print(mySet)
# result: {'3', '2', 'b', '1', 'a', 'c'}
- 集合和字典推导都是使用花括号,区别是字典中有key: value的键值对。
- 集合和列表结果的区别:集合是无序的且不可重复的,列表是有序的且可重复的。