跳到主要内容

推导式 vs 高阶方法:优雅地批量处理

从 for 循环到更简洁的写法

先看一个常见场景:把一个列表里的每个数字都翻倍。

加载代码编辑器中……

这也行,但有点啰嗦。两种语言都有更优雅的写法。

Python:列表推导式

Python 的列表推导式(list comprehension)是它最受欢迎的特性之一:

加载代码编辑器中……

对照表

操作PythonJavaScript
转换每个元素[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"。

更多高阶方法

加载代码编辑器中……
操作PythonJavaScript
累积计算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]

  1. 筛选出所有及格(>= 60)的成绩
  2. 把及格成绩都加 5 分(鼓励加分)
  3. 计算加分后的平均分

用 Python 的推导式和 JS 的 map/filter 各写一版。链式调用越多越帅!

小结

概念PythonJavaScript
映射[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 的链式调用是"一步一步组装流水线"。 都很优雅,选你喜欢的风格就好。