《Python 学习笔记:列表推导式,一行顶五行的快感》
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 转过来的朋友,我建议先把这种日常高频写法练熟。花哨技巧吃多了没用,但这种每天要写十遍的东西,一行和六行的差距,一年下来就是实打实省下的时间。
- 点赞
- 收藏
- 关注作者
评论(0)