Python 列表推导式与生成器表达式详解

什么是列表推导式?

列表推导式是Python特有的简洁写法,用一行代码代替多行循环。

基本语法

# 传统写法
squares = []
for i in range(10):
    squares.append(i**2)

# 推导式写法(一行搞定)
squares = [i**2 for i in range(10)]

带条件过滤

# 获取0-99之间的偶数
evens = [x for x in range(100) if x % 2 == 0]

字典推导式

name_lengths = {name: len(name) for name in ['Tom', 'Jerry', 'Alice']}
# {'Tom': 3, 'Jerry': 5, 'Alice': 5}

集合推导式

numbers = [1, 2, 2, 3, 3, 4]
unique = {x for x in numbers}  # {1, 2, 3, 4}

生成器表达式

gen = (x**2 for x in range(1000000))

# 惰性求值,不占内存
print(next(gen))  # 0
print(next(gen))  # 1

# 适合处理大量数据
total = sum(x**2 for x in range(1000000))

实战案例

# 1. 过滤并转换列表
data = ['12', 'abc', '45', 'xyz', '78']
numbers = [int(s) for s in data if s.isdigit()]
# [12, 45, 78]

# 2. 嵌套列表展开
nested = [[1, 2], [3, 4, 5], [6]]
flat = [x for sublist in nested for x in sublist]
# [1, 2, 3, 4, 5, 6]

总结

推导式是Python的语言精髓,能显著提升代码简洁度和可读性。但过长的推导式反而不易读。