生成器推导式

1.语法格式

(experssion for item in iterable if condition)(与列表推导式相似)
‌· expression‌:对每个元素的操作表达式
‌· item‌:迭代变量
‌· iterable‌:可迭代对象(如列表、字符串等)
· if condition‌:可选的条件过滤‌

示例‌:

# 生成0-9的平方生成器
squares = (x**2 for x in range(10))
print(next(squares))  # 输出:0
print(next(squares))  # 输出:1

2.‌核心特点

· 惰性求值‌:生成器推导式不会立即生成所有元素,而是通过next()或循环逐个生成,节省内存‌
‌· 单次使用‌:生成器遍历后无法重复使用,需重新创建‌
‌· 高效性‌适合处理大规模数据流,避免一次性加载全部数据‌

对比列表推导式:
# 列表推导式(立即生成所有元素)
list_comp = [x**2 for x in range(1000000)]  # 占用大量内存
# 生成器推导式(按需生成)
gen_comp = (x**2 for x in range(1000000))   # 内存友好

3. 注意事项

· 不可索引‌:生成器不支持下标访问
· 性能权衡‌:虽然节省内存,但频繁调用next()可能比列表推导式稍慢‌
如需复用生成器的数据,可转换为列表(但会失去惰性优势):

gen = (x for x in range(5))
list_from_gen = list(gen)  # 转为列表:[0,1,2,3,4]

posted @ 2025-07-26 10:30  胡啊花瓜  阅读(12)  评论(0)    收藏  举报