集合生成式
如果想要生成集合{1, 4, 9, 16, 25, 36},可使用for-in循环:
s = set()
for i in range(1, 7):
s.add(i * i)
print(s) # {1, 4, 36, 9, 16, 25}
上述的解决方案有更好的替代,那就是使用集合生成式。
集合生成式语法
{表示集合元素的表达式 for 自定义的变量 in 可迭代对象}
其中,"表示集合元素的表达式"中通常包含"自定义的变量"。
集合生成式的使用场景,凡是可以通过for-in循环创建的集合,都可以使用集合生成式来创建。
s = {i * i for i in range(1, 7)}
print(s) # s = {i * i for i in range(1, 7)}
在集合生成式中使用if
可以在集合生成式的for-in循环后添加if语句
s = {i * i for i in range(1, 7) if not i % 2}
print(s) # {16, 4, 36}
# 以上代码相当于:
s = set()
for i in range(1, 7):
if not i % 2:
s.add(i * i)
print(s) # {16, 4, 36}
在集合生成式中使用双重循环
s = {(i, j) for i in range(1, 4) for j in range(1, 4)}
print(s)
# 以上代码相当于:
s = set()
for i in range(1, 4):
for j in range(1, 4):
s.add((i, j))
print(s)
# 既使用双重for-in循环,又使用if语句
s = {(i, j) for i in range(1, 4) for j in range(1, 4) if i != j}
print(s)
返回结果如下:
{(1, 2), (2, 1), (3, 1), (1, 1), (2, 3), (3, 3), (2, 2), (3, 2), (1, 3)}
{(1, 2), (2, 1), (3, 1), (1, 1), (2, 3), (3, 3), (2, 2), (3, 2), (1, 3)}
{(1, 2), (2, 1), (3, 1), (2, 3), (3, 2), (1, 3)}
列表生成式
如果想要生成列表[1, 4, 9, 16, 25, 36],可以使用for-in循环:
L = []
for i in range(1, 7):
L.append(i * i)
print(L) # [1, 4, 9, 16, 25, 36]
上述的解决方案有更好的替代,那就是使用列表生成式。
列表生成式语法
[表示列表元素的表达式 for 自定义的变量 in 可迭代对象]
其中,"表示列表元素的表达式"中通常包含"自定义的变量"。
列表生成式的使用场景:凡是可以通过for-in循环创建的列表,都可以使用列表生成式来创建。
L = [i * i for i in range(1, 7)]
print(L) # [1, 4, 9, 16, 25, 36]
在列表生成式中使用if语句
L = [i * i for i in range(1, 7) if not i % 2]
print(L) # [4, 16, 36]
在列表生成式中使用双重循环
L = [(i, j) for i in range(1, 4) for j in range(1, 4)]
print(L) # [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
# 既使用双重for-in循环,又使用if语句
L = [(i, j) for i in range(1, 4) for j in range(1, 4) if not i != j]
print(L) # [(1, 1), (2, 2), (3, 3)]
列表生成式支持嵌套
可以在一个列表生成式中嵌套另外一个列表生成式
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
L = [[row[i] for row in matrix] for i in range(4)]
print(L) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
# 以上代码相当于:
L = []
for i in range(4):
L.append([row[i] for row in matrix])
print(L)
字典生成式
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 83]
# 如果想要生成字典:{'Fruits': 96, 'Books': 78, 'Others': 83},可以使用for-in循环:
d = {}
for item, price in zip(items, prices):
d[item.upper()] = price
print(d) # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 83}
上述的解决方案有更好的替代,那就是使用字典生成式。
字典生成式语法
{表示字典key的表达式: 表示字典value的表达式 for 自定义的表示key的变量, 自定义的表示value的变量 in 可迭代对象}
其中,"表示字典key的表达式"中通常包含"自定义的表示key的变量","表示字典value的表达式"中通常包含"自定义的表示value的变量"
字典生成式的使用场景:凡是可以通过for-in循环创建的字典,都可以使用字典生成式来创建。
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 83]
d = {item.upper(): price for item, price in zip(items, prices)}
print(d) # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 83}
在字典生成式中使用if
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 83]
d = {item: price for item, price in zip(items, prices) if price > 80}
print(d) # {'Fruits': 96, 'Others': 83}
在字典生成式中使用双重for-in
d = {i: j for i in range(1, 4) for j in range(1, 4)}
print(d) # {1: 3, 2: 3, 3: 3}