教程 python tutorial

列表推导式与生成式

列表推导式和生成式是 Python 中强大的语法特性,它们使得我们能够以简洁的方式生成列表和其他可迭代对象,避免了冗长的代码结构。

列表推导式

列表推导式是一种从其他可迭代对象(如列表、元组、字典等)创建新列表的简洁方式。它的基本语法是:

python
[expression for item in iterable if condition]

示例:

python
# 从 0 到 9 中筛选出偶数并平方
numbers = [x**2 for x in range(10) if x % 2 == 0]
print(numbers)

输出:

代码
[0, 4, 16, 36, 64]

在上面的例子中,列表推导式首先从 range(10) 中选择偶数(通过 if x % 2 == 0),然后对选中的偶数进行平方运算。

带有多个 for 子句的列表推导式:

python
# 生成一个 3x3 的矩阵
matrix = [[row * col for col in range(3)] for row in range(3)]
print(matrix)

输出:

代码
[[0, 0, 0], [0, 1, 2], [0, 2, 4]]

生成式

生成式与列表推导式非常相似,但是它返回的是一个生成器对象,而不是列表。生成器是惰性计算的,只有在需要的时候才会计算出结果,具有更高的内存效率。

生成器的基本语法是:

python
(expression for item in iterable if condition)

示例:

python
# 从 0 到 9 中筛选出偶数并生成其平方
gen = (x**2 for x in range(10) if x % 2 == 0)
print(gen)

输出:

代码
<generator object <genexpr> at 0x0000000A1D2A58C0>

虽然 gen 是一个生成器对象,但它本身不会立即计算出结果。你可以通过 for 循环或将其转换为列表来获取结果:

python
for value in gen:
    print(value)

输出:

代码
0
4
16
36
64

或使用 list() 将其转换为列表:

python
gen = (x**2 for x in range(10) if x % 2 == 0)
print(list(gen))

输出:

代码
[0, 4, 16, 36, 64]

列表推导式与生成式的比较

特性 列表推导式 生成式
输出类型 列表 生成器对象
内存效率 较低,生成完整列表 较高,仅在需要时计算生成元素
适用场景 当需要一个完整的列表时 当数据量较大且不需要一次性生成完整数据时
语法 [expression for item in iterable] (expression for item in iterable)

总结

  • 列表推导式是一种简洁的方式来创建列表,可以在单行代码中处理复杂的操作。
  • 生成式与列表推导式相似,但返回一个惰性计算的生成器对象,适用于处理大量数据时。
  • 通过掌握列表推导式与生成式,你可以写出更加高效、简洁且可读性强的 Python 代码。

列表推导式和生成式都是 Python 编程中非常重要的技巧,能够帮助你在不同场景下提高代码的执行效率和可读性。


这段内容介绍了 Python 中的列表推导式和生成式,解释了它们的基本语法、使用场景以及内存效率的对比,并通过示例演示了如何在实际应用中使用它们。