2024-08-26    2024-08-26     669 字  2 分钟

列表生成式(List Comprehension)是 Python 中一种生成列表的方式。它允许你使用单行语法,基于已有的序列(如列表、元组、字符串等)来生成一个新的列表,且通常比使用传统的 for 循环更直观、简洁。

基本语法如下:

[expression for variable in iterable if condition]

其中:

  • expression:是生成列表中每个元素的表达式,它可以是变量、函数调用、或者其他运算。例如:x * 2
  • for variable in iterable:是一个循环,用来遍历可迭代对象(如列表、元组、字符串等)。变量代表当前循环到的元素。
  • if condition(可选):可选的条件判断部分,只有满足条件的元素才会包含在生成的列表中。

示例:

# 简单的列表生成式
lst = [x for x in range(10)]
print(lst)  # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 带表达式的列表生成式
squares = [x ** 2 for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 输出: [0, 2, 4, 6, 8]

# 嵌套的列表生成式
multiplication_table = [[(i + 1) * (j + 1) for j in range(3)] for i in range(3)]
print(multiplication_table)
# 输出: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

关于嵌套的列表生成式,其基本语法如下:

[[expression for inner_loop in iterable] for outer_loop in iterable]  # 注意嵌套的方式

如:生成一个 3×4 的二维数组,其中每个元素是其行索引加列索引的和。

# List comprehension ver
array_2d = [[i + j for j in range(4)] for i in range(3)]
print(array_2d)

# Loop ver
array_2d = []

# 外层循环控制行数 i 的变化
for i in range(3):
    row = []  # 创建一个新的行
    # 内层循环控制列数 j 的变化
    for j in range(4):
        row.append(i + j)  # 将 i + j 的结果添加到当前行
    array_2d.append(row)  # 将生成的行添加到二维数组中

# 输出结果
for row in array_2d:
    print(row)

从该例子可以看出使用列表生成式的优势。值得注意的是,Python 允许多层嵌套,但相较于三层及以上,二层使用得更多。此外,在涉及到多维数组的运算等时,可能使用 numpy 包所提供的功能更为合适。