如何朗读Python列表推导式?
我想问的是关于Python中列表推导式的可读性。当我看到复杂或嵌套的列表推导式代码时,常常需要反复阅读几遍才能理解它的意思。
有没有一种直观的方法可以朗读列表推导式?我觉得应该从中间开始“阅读”,然后再读if条件(如果有的话),最后再读表达式。
以下是我为了理解这行代码而朗读的方式:
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
“对于列表x中的每个元素,以及列表y中的每个元素,如果这两个元素不相同,创建一个元组的列表。”
我在理解的过程中遇到的两个例子是:
来自Stack Overflow的另一个问题:
[x for b in a for x in b]
Python文档中的这个例子:
[[row[i] for row in matrix] for i in range(4)]
如果有任何建议或提示,能让朗读列表推导式的意图更清晰,我将非常感激。
2 个回答
4
“根据Y和Z的情况,构建一个X的列表,使得Q成立。”
36
我通常会在脑海中把它展开成一个生成循环,比如说
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
这是生成器的列表推导式
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
yield (x, y)
例子 #1
[x for b in a for x in b]
是这个的推导式
for b in a:
for x in b:
yield x
当 a = [[1,2,3],[4,5,6]]
时的结果是:[1, 2, 3, 4, 5, 6]
例子 #2
[[row[i] for row in matrix] for i in range(4)]
(注意里面的表达式又是一个推导式!):
for i in range(4):
yield [row[i] for row in matrix]
展开后是
for i in range(4):
l = []
for row in matrix:
l.append(row[i])
yield l