Day 018 — 练习题与检查表
练习题
基础题
-
平方数列表:用列表推导式生成 1 到 20 的平方数列表。
-
偶数过滤:从
numbers = [1, 5, 8, 12, 15, 20, 23, 30]中过滤出所有偶数,并乘以 3。 -
字典构建:用字典推导式从
words = ['apple', 'banana', 'cherry', 'date']构建单词→长度的映射。 -
集合去重:用集合推导式从
text = "hello world python programming"中提取所有不重复的字母。
进阶题
-
嵌套扁平化:将
[[1, 2], [3, 4, 5], [6], [7, 8, 9, 10]]用一条推导式扁平化。 -
字典过滤:给定
scores = {'Alice': 85, 'Bob': 42, 'Charlie': 73, 'Diana': 91, 'Eve': 58},找出一行代码找出所有分数 >= 60 的姓名。 -
笛卡尔积:用推导式生成集合
{1, 2, 3}与{4, 5}的所有有序对,且两个元素的和为奇数。 -
矩阵旋转:用推导式实现矩阵顺时针旋转 90°。
-
生成器求和:用生成器表达式计算 1 到 1,000,000 之间所有奇数的立方和(不创建大列表)。
挑战题
-
素数判断:用列表推导式找出 2–100 之间的所有素数。(提示:使用
all()) -
单词统计:给定一段文本,用推导式统计每个单词出现的次数(忽略大小写和标点)。
-
性能优化:给定一个包含 10,000 个整数的列表,分别用推导式和
map()将每个数取平方,用timeit比较两者速度差异。
检查表
完成本日后,你应该能够:
概念理解
- [ ] 理解列表推导式的语法结构:
[expr for item in iterable if cond] - [ ] 理解推导式的数学本质(集合构造式思想)
- [ ] 理解推导式内部的字节码优化机制
- [ ] 区分列表、字典、集合三种推导式的语法
- [ ] 理解嵌套推导式的从左到右执行顺序
- [ ] 理解生成器表达式与列表推导式的区别
- [ ] 知道何时用推导式、何时用普通循环
动手能力
- [ ] 能编写基本的列表/字典/集合推导式
- [ ] 能在推导式中使用条件过滤
- [ ] 能结合三元表达式和推导式
- [ ] 能编写嵌套推导式(扁平化、笛卡尔积)
- [ ] 能使用字典推导式构建查找表、反转键值
- [ ] 能用生成器表达式替代大数据量的列表推导式
- [ ] 能识别推导式常见的陷阱(闭包、副作用、过度复杂)
实战技能
- [ ] 能用推导式构建数据清洗流水线
- [ ] 能用推导式处理矩阵运算
- [ ] 能用生成器表达式优化内存使用
- [ ] 能使用
timeit对比不同实现的性能 - [ ] 能写出既有性能又易读的推导式代码
自我评估
- [ ] 我认为自己已经完全掌握了推导式 → ⭐⭐⭐
- [ ] 我能熟练使用推导式解决实际问题 → ⭐⭐
- [ ] 我还需要更多练习 → ⭐