列表生成式(List Comprehension)是 Python 中一种生成列表的方式。它允许你使用单行语法,基于已有的序列(如列表、元组、字符串等)来生成一个新的列表,且通常比使用传统的 for
循环更直观、简洁。
基本语法如下:
1[expression for variable in iterable if condition]
其中:
expression
:是生成列表中每个元素的表达式,它可以是变量、函数调用、或者其他运算。例如:x * 2
。for variable in iterable
:是一个循环,用来遍历可迭代对象(如列表、元组、字符串等)。变量代表当前循环到的元素。if condition
(可选):可选的条件判断部分,只有满足条件的元素才会包含在生成的列表中。
示例:
1# 简单的列表生成式
2lst = [x for x in range(10)]
3print(lst) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4
5# 带表达式的列表生成式
6squares = [x ** 2 for x in range(10)]
7print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
8
9even_numbers = [x for x in range(10) if x % 2 == 0]
10print(even_numbers) # 输出: [0, 2, 4, 6, 8]
11
12# 嵌套的列表生成式
13multiplication_table = [[(i + 1) * (j + 1) for j in range(3)] for i in range(3)]
14print(multiplication_table)
15# 输出: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
关于嵌套的列表生成式,其基本语法如下:
1[[expression for inner_loop in iterable] for outer_loop in iterable] # 注意嵌套的方式
如:生成一个 3×4 的二维数组,其中每个元素是其行索引加列索引的和。
1# List comprehension ver
2array_2d = [[i + j for j in range(4)] for i in range(3)]
3print(array_2d)
4
5# Loop ver
6array_2d = []
7
8# 外层循环控制行数 i 的变化
9for i in range(3):
10 row = [] # 创建一个新的行
11 # 内层循环控制列数 j 的变化
12 for j in range(4):
13 row.append(i + j) # 将 i + j 的结果添加到当前行
14 array_2d.append(row) # 将生成的行添加到二维数组中
15
16# 输出结果
17for row in array_2d:
18 print(row)
从该例子可以看出使用列表生成式的优势。值得注意的是,Python 允许多层嵌套,但相较于三层及以上,二层使用得更多。此外,在涉及到多维数组的运算等时,可能使用 numpy
包所提供的功能更为合适。