当前位置:首页>python>别再写for循环了,Python列表推导式教你做人

别再写for循环了,Python列表推导式教你做人

  • 2026-10-11 08:18:59
别再写for循环了,Python列表推导式教你做人

3行for循环 vs 1行列表推导式,速度差10倍,代码量差10倍

1、筛选
# 旧: 3行result = []for x in range(20):    if x % 2 == 0:        result.append(x)# 新: 1行result = [x for x in range(20) if x % 2 == 0]# → [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
2、带变换
# 旧: 5行squares = []for x in range(1, 11):    if x % 2 == 0:        squares.append(x ** 2)# 新: 1行squares = [x**2 for x in range(1, 11) if x % 2 == 0]# → [4, 16, 36, 64, 100]
3、双重循环
# 旧: 4行pairs = []for x in [1, 2, 3]:    for y in [4, 5, 6]:        pairs.append((x, y))# 新: 1行pairs = [(x, y) for x in [1,2,3] for y in [4,5,6]]# → [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
4、字典推导式
# 一行生成字典words = ["hello", "world", "python"]lengths = {w: len(w) for w in words}# → {"hello": 5, "world": 5, "python": 6}# 一行过滤字典d = {"a": 1, "b": 2, "c": 3, "d": 4}big = {k: v for k, v in d.items() if v > 2}# → {"c": 3, "d": 4}
5、集合推导式
# 一行集合squares_set = {x**2 for x in range(-5, 6)}# → {0, 1, 4, 9, 16, 25}# 一行去重unique = {x for x in [1, 2, 2, 3, 3, 3]}# → {1, 2, 3}
6、生成器表达式
# 不占内存的列表(大数据场景)gen = (x**2 for x in range(10**8))print(next(gen), next(gen))  # 0, 1# vs 普通列表(占内存)lst = [x**2 for x in range(10**8)]  # 内存爆炸

类型

语法

示例

列表推导式

[x for x in lst]

[x for x in range(10)]

筛选版

[x for x in lst if cond]

[x for x in range(10) if x%2==0]

字典推导式

{k:v for k,v in d.items()}

{k:len(k) for k in words}

集合推导式

{x for x in lst}

{x**2 for x in range(10)}

生成器

(x for x in lst)

(x**2 for x in range(10**8))

☆☆☆ End ☆☆☆转角  ·  遇见  ·  程序猿
-------------------------
那是一抹淡淡的微光

它是数字世界里的一把杀猪刀

却总能巧夺天工

它的世界是纯粹0、1组合

却总能创造无尽幻想

......

本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。

最新文章

随机文章