推导式 vs 高阶方法:优雅地批量处理
从 for 循环到更简洁的写法
先看一个常见场景:把一个列表里的每个数字都翻倍。
加载代码编辑器中……
这也行,但有点啰嗦。两种语言都有更优雅的写法。
Python:列表推导式
Python 的列表推导式(list comprehension)是它最受欢迎的特性之一:
加载代码编辑器中……
对照表
| 操作 | Python | JavaScript |
|---|---|---|
| 转换每个元素 | [f(x) for x in lst] | lst.map(x => f(x)) |
| 过滤元素 | [x for x in lst if cond] | lst.filter(x => cond) |
| 转换 + 过滤 | [f(x) for x in lst if cond] | lst.filter(x => cond).map(x => f(x)) |
Python 用一种语法(推导式)搞定转换和过滤。JS 用两个方法(map + filter)组合。各有千秋。
问问 AI
问 AI:"Python 的列表推导式和 JS 的 map/filter 相比,各自的优缺点是什么?在什么场景下哪个更合适?"
这不是简单的"哪个更好"的问题——答案取决于场景。
JS 的箭头函数(快速介绍)
你可能注意到了 JS 代码里的 n => n * 2,这是箭头函数——一种简洁的函数写法:
加载代码编辑器中……
箭头函数我们会在下一章"函数"里详细讲。这里只需要知道
x => x * 2意思是"接收 x,返回 x * 2"。
更多高阶方法
加载代码编辑器中……
| 操作 | Python | JavaScript |
|---|---|---|
| 累积计算 | reduce() 或内置函数 | .reduce() |
| 全部满足 | all() | .every() |
| 存在满足 | any() | .some() |
| 求和 | sum() ✨ | .reduce((a, b) => a + b, 0) |
Python 有很多内置函数(
sum,min,max,sorted),JS 的数组方法更统一但要多写几个字。
🏋️AI 练习
给定一个学生成绩列表 [78, 92, 55, 88, 43, 96, 71]:
- 筛选出所有及格(>= 60)的成绩
- 把及格成绩都加 5 分(鼓励加分)
- 计算加分后的平均分
用 Python 的推导式和 JS 的 map/filter 各写一版。链式调用越多越帅!
小结
| 概念 | Python | JavaScript |
|---|---|---|
| 映射 | [f(x) for x in lst] | lst.map(x => f(x)) |
| 过滤 | [x for x in lst if cond] | lst.filter(x => cond) |
| 累积 | reduce() / sum() | .reduce() |
| 全部判断 | all() | .every() |
| 存在判断 | any() | .some() |
一句话:Python 的推导式是"一句话干三件事",JS 的链式调用是"一步一步组装流水线"。 都很优雅,选你喜欢的风格就好。