编程学习网 > 编程语言 > Python > 别再用循环了,用 Python 的 map 和 filter,代码又简洁又高效。
2026
08-03

别再用循环了,用 Python 的 map 和 filter,代码又简洁又高效。


我刚学 Python 的时候,写循环写得特别顺手。遇到一个列表要处理,第一反应就是 for i in range(len(list))。后来看别人的代码,发现有人写 map  filter,代码短得惊人。我还觉得人家在炫技,心里想:循环明明也能解决问题,干嘛要学新东西。

直到有一天,我接手一个项目,里面有几千行代码。满眼都是嵌套的 for 循环,变量名满天飞。我改一个功能,要顺着循环一层一层往下找,脑子都快炸了。那天我才意识到,循环写起来爽,读起来是真遭罪

你想想看,循环到底在做什么?它在告诉计算机你先这样做,然后那样做,做完再回来。每一次循环你都要操心索引对不对,边界有没有越界。大脑就像同时在处理两件事:业务逻辑是什么,控制流程怎么走。map filter 把这些脏活包了,你只需要关心数据怎么变

举个最简单的例子。你有一组数字,想把每个数字翻倍。循环写法是这样的:

numbers = [1, 2, 3, 4, 5]
doubled = []
for n in numbers:
    doubled.append(n  2)

map 怎么写呢?

doubled = list(map(lambda x: x  2, numbers))

一行搞定。你一眼就能看出来,这行代码在做一个映射:把 numbers 里的每个数乘以 2map 的核心价值不是省行数,是让你从怎么遍历里解脱出来

filter 也一样。你想从一个列表里挑出偶数。循环要写三四行,filter 一行:

evens = list(filter(lambda x: x % 2 == 0, numbers))

这行代码读起来就是过滤出 numbers 里能被 2 整除的数。不必关心怎么判断、怎么收集结果。逻辑从上往下读,数据顺着管道走,大脑负担轻了一大半

有人担心性能问题。其实 Python map filter 跟循环速度差不多,某些情况下还更快。它们内部有优化,不是用 Python for 循环跑出来的。你写循环的时候,每次 append 都会触发一次列表扩容,map filter 直接预分配好了空间。想跑得快,用 map filter 反而更稳

还有人说 lambda 不好读。那你自己定义个函数传进去行不行?完全可以。比如你有个复杂的转换逻辑,定义一个函数 clean_data,然后 list(map(clean_data, raw_list))。比你写一大坨 for 循环好看十倍。函数名就是文档,读代码的人一看就知道你要干嘛

我现在的习惯是,数据处理写 map filter,只有那种顺序执行、依赖前后状态的操作才用循环。比如发邮件要记录发送失败的,或者需要跳出多层的,这些用循环没问题。但如果你只是在遍历列表做变换或者过滤,别用循环,直接用 map filter

你试试看把旧代码里的循环改一改。改完你会发现,代码短了,逻辑清楚了,别人接手你的代码也能少骂两句。这就是 map filter 给你的礼物。

以上就是“别再用循环了,用 Python 的 map 和 filter,代码又简洁又高效。的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取