列表推导式(List Comprehension)是Python中的一种简洁语法,用于从现有列表或其他可迭代对象创建新列表。它通过在一个表达式中包含一个for循环和一个可选的if条件。
基本语法
[表达式 for 变量 in 可迭代对象 if 条件]表达式:生成列表元素的表达式,可以是对变量的操作。
变量:在循环中用来表示每个元素的变量。
可迭代对象:任何可以迭代的对象,如列表、字符串、元组、集合等。
条件(可选):筛选元素的条件,只有满足条件的元素才会包含在生成的列表中。
示例
基本列表推导式:
numbers = [1, 2, 3, 4, 5]
squares = [n**2 for n in numbers]
print(squares) # 输出: [1, 4, 9, 16, 25]带条件的列表推导式:
numbers = [1, 2, 3, 4, 5]
even_squares = [n**2 for n in numbers if n % 2 == 0]
print(even_squares) # 输出: [4, 16]多个for循环的列表推导式:
创建一个包含两个列表中元素对的笛卡尔积:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
cartesian_product = [(x, y) for x in list1 for y in list2]
print(cartesian_product)
# 输出: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]复杂示例
假设我们有一个二维列表(矩阵),我们想要将其转置:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed) # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]使用了嵌套的列表推导式来实现矩阵的转置操作。
逐步分析
外层列表推导式
外层列表推导式 [... for i in range(len(matrix[0]))] 用于生成转置矩阵的每一行:
range(len(matrix[0]))产生列索引,即i将遍历0, 1, 2。len(matrix[0])是矩阵列的数量。
内层列表推导式
内层列表推导式 [row[i] for row in matrix] 用于生成转置矩阵的单行:
row[i]访问矩阵每一行的第i列元素。for row in matrix遍历矩阵的每一行。
具体过程
当
i = 0时:内层列表推导式
[row[0] for row in matrix]遍历矩阵的每一行,取出第0列的元素:matrix[0][0]是1matrix[1][0]是4matrix[2][0]是7
生成
[1, 4, 7],作为转置矩阵的第一行。
当
i = 1时:内层列表推导式
[row[1] for row in matrix]遍历矩阵的每一行,取出第1列的元素:matrix[0][1]是2matrix[1][1]是5matrix[2][1]是8
生成
[2, 5, 8],作为转置矩阵的第二行。
当
i = 2时:内层列表推导式
[row[2] for row in matrix]遍历矩阵的每一行,取出第2列的元素:matrix[0][2]是3matrix[1][2]是6matrix[2][2]是9
生成
[3, 6, 9],作为转置矩阵的第三行。