列表推导式:Python 里最像「黑魔法」的语法糖
听说你还在用 for 循环?
刚学 Python 的时候,写个列表要这么来:
result = []
for i in range(10):
result.append(i * 2)
6 行代码。直到有一天,你看到大佬的代码:
result = [i * 2 for i in range(10)]
1 行,搞定。你的内心:???这是 Python 还是黑魔法???
列表推导式是啥?
[表达式 for 变量 in 可迭代对象 if 条件]
这个 if 条件是可选的,但加上它你就拥有了上帝视角。
取代 map 和 filter
# filter
list(filter(lambda x: x % 2 == 0, range(10)))
# 列表推导式
[x for x in range(10) if x % 2 == 0]
哪个更香?不用我说了吧。
嵌套也可以玩
matrix = [[1,2,3], [4,5,6], [7,8,9]]
flattened = [num for row in matrix for num in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:嵌套的 for 顺序跟普通循环一样,先外层再内层。
别滥用!
当你写出这样的代码:
[x for x in [y for y in [z for z in range(10) if z > 5]]]
恭喜你,三个月后的自己看不懂这段代码。记住:代码是用来读的,不是用来秀操作的。
字典和集合也可以
{n: n**2 for n in range(5)} # 字典
{n % 3 for n in range(10)} # 集合
至于元组推导式?别想了,(x for x in range(10)) 返回生成器。
最后一句
列表推导式就像 Python 界的冷笑话:懂的人觉得太好笑了,不懂的人觉得你在说啥?
去试试吧,用一次就会上瘾。