2022年 11月 5日

【Python】列表解析式

列表解析式 是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}