Python 进阶
生成器表达式
理解生成器表达式与列表推导式的区别
- 理解生成器与列表的区别
- 使用生成器表达式节省内存
- 掌握 any/all 函数
生成器表达式
把列表推导式的 [] 换成 () 就是生成器表达式。它不立即创建列表,而是按需生成元素:
示例代码(可运行)
Python 0%
ℹ️什么时候用生成器
处理百万级这类大量数据时,生成器不占大量内存。但生成器只能遍历一次,需要索引或多次遍历时用列表。
any() 和 all()
示例代码(可运行)
Python 0%
预测输出
gen = (x for x in range(3))
print(list(gen))
print(list(gen))找 Bug生成器不支持索引访问。
gen = (x for x in range(5))
print(gen[2])
填空题填写空白处的代码
nums = [2,4,6,8]
print((n > 5 for n in nums)) # True
选择题
生成器表达式用什么括号?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
list 底层是一段连续的指针数组,容量不够时整体扩容(CPython 约按 1.125 倍)。因此按下标取元素是 O(1),末尾 append 均摊 O(1),但在头部 insert(0,…) 或 pop(0) 要搬动全部元素、是 O(n)。dict/set 基于哈希表,平均查找 O(1) 但更耗内存。选对数据结构,往往比抠语法更影响性能。
挑战任务
生成器挑战
简单+50 XP
直接用生成器表达式算1到1000里偶数的和,不用创建列表。
生成器挑战
Python 0%
2 个测试用例
课后作业
大文件处理
中等+20 XP
用生成器思路找1-10000里的所有素数,就用sum加生成器。
大文件处理
Python 0%
1 个测试用例