跳转至

Python3 推导式

概念与用途

推导式以声明式方式构造列表、集合和字典,适合短小的映射与过滤。生成器表达式使用圆括号并惰性求值,适合只遍历一次的大数据流。

核心语法

基本形式为 [表达式 for 变量 in 可迭代对象 if 条件]。集合使用 {expr ...},字典使用 {key: value ...};多层推导式的顺序与嵌套循环一致。

words = ["Python", "api", "security", "AI"]
lengths = {word.casefold(): len(word) for word in words if len(word) >= 3}
squares = (number * number for number in range(1, 6))
print(lengths)
print(sum(squares))

形式对照

形式 结果 是否惰性
[x for x in source] list 否
{x for x in source} set 否
{k: v for ...} dict 否
(x for x in source) generator 是

示例:嵌套数据展平

matrix = [[1, 2], [3, 4], [5]]
flat = [value for row in matrix for value in row]
coordinates = [(row, column) for row in range(2) for column in range(3)]
print(flat)
print(coordinates)

多层推导式按从左到右的嵌套循环顺序阅读。若需要暂停调试、统计错误或复用中间值,应改写为普通循环,不能用复杂推导式隐藏控制流。

常见错误与工程注意

  • 包含复杂条件、副作用或多层嵌套时,普通循环更易维护。
  • 生成器表达式只能消费一次,不要假设第二次遍历仍有数据。
  • 不要仅为调用有副作用函数而创建无用列表。