列表解析式
是Python中的语法糖,用于生成新的列表。
基本使用
# 生成一个包含1-10平方的列表
lis = [x*x for x in range(1, 11)]
# 等效于:
lis = []
for x in range(1, 11):
lis.append(x*x)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
进阶使用
-
加入条件语句
# 生成一个1-10中偶数的平方的列表 lis = [x*x for x in range(1, 11) if x%2 == 0] # 等效于: lis = [] for x in range(1, 11): if x%2 == 0: lis.append(x*x)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
[4, 16, 36, 64, 100]
-
多层嵌套
lis = [(x, y) for x in 'abc' for y in range(3)] # 等效于: lis = [] for x in 'abc': for y in range(3): tup = (x, y) lis.append(tup)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
[(‘a’, 0), (‘a’, 1), (‘a’, 2), (‘b’, 0), (‘b’, 1), (‘b’, 2), (‘c’, 0), (‘c’, 1), (‘c’, 2)]
为什么要使用列表解析式
- 可以简化代码,增加可读性
- 编译器会进行优化,可以提高代码运行效率
扩展
Python中还有
字典解析式
、元组解析式
、集合解析式
,使用方法与列表解析式
相同。
字典解析式
# 生成大写字母与其ASCII码的对照表
dic = {chr(x):x for x in range(65, 91)}
- 1
- 2
{‘A’: 65, ‘B’: 66, ‘C’: 67, ‘D’: 68, ‘E’: 69, ‘F’: 70, ‘G’: 71, ‘H’: 72, ‘I’: 73, ‘J’: 74, ‘K’: 75, ‘L’: 76, ‘M’: 77, ‘N’: 78, ‘O’: 79, ‘P’: 80, ‘Q’: 81, ‘R’: 82, ‘S’: 83, ‘T’: 84, ‘U’: 85, ‘V’: 86, ‘W’: 87, ‘X’: 88, ‘Y’: 89,
‘Z’: 90}
元组解析式
# 生成一个包含1-10平方的元组
tup = tuple(x*x for x in range(1, 11))
- 1
- 2
(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)
集合解析式
# 生成一个包含1-10平方的集合
se = {x*x for x in range(1, 11)}
- 1
- 2
{64, 1, 4, 36, 100, 9, 16, 49, 81, 25}