《Python 学习笔记:列表推导式,一行顶五行的快感》

举报
yd_274683020 发表于 2026/11/06 11:19:55 2026/11/06
【摘要】 Java 写久了,处理集合的肌肉记忆就是:新建一个 list,for 循环遍历,if 判断,再 add 进去。一个简单的筛选,五六行起步。转 Python 之后最先让我觉得爽的,就是列表推导式——同样的活,一行。先看个最基础的例子。想把一个列表里的数字都平方,Python 一行就够:squares = [x * x for x in nums]读法是跟着顺序来:先 for 遍历,再把每个 x...

Java 写久了,处理集合的肌肉记忆就是:新建一个 list,for 循环遍历,if 判断,再 add 进去。一个简单的筛选,五六行起步。转 Python 之后最先让我觉得爽的,就是列表推导式——同样的活,一行。

先看个最基础的例子。想把一个列表里的数字都平方,Python 一行就够:

squares = [x * x for x in nums]

读法是跟着顺序来:先 for 遍历,再把每个 x 拿来算,最后装进新列表。刚开始看不习惯,看两天就顺了,因为它的语序其实跟人说话一样:把每个 x 的平方,收集起来。

带条件的筛选也是一行:

evens = [x for x in nums if x % 2 == 0]

if 放在最后面,满足条件的才留下,相当于 Java 里 stream 的 filter,写起来短得多。

还能带 else,做简单的转换:

labels = ['偶' if x % 2 == 0 else '奇' for x in nums]

注意这个 if-else 是放在 for 前面的,跟筛选的 if 位置不一样,这是新手最容易搞混的地方:筛选的 if 在后,决定“留不留”;转换的 if-else 在前,决定“变成啥”。

好用归好用,我自己给它立了条规矩:推导式只写一层、最多带一个条件。再复杂就老老实实写回普通 for 循环。见过有人把三层嵌套和两个条件全塞进一行,那已经不是简洁了,是密码,自己三天后都读不懂。

字典也有对应的推导式写法,思路完全一样:

squares_map = {x: x * x for x in nums}

从 Java 转过来的朋友,我建议先把这种日常高频写法练熟。花哨技巧吃多了没用,但这种每天要写十遍的东西,一行和六行的差距,一年下来就是实打实省下的时间。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。