我的问题是关于Python 列表理解的可读性。当我遇到带有复杂/嵌套列表理解的代码时,我发现我必须重新阅读它们几次才能理解其意图。
有没有一种直观的方法来朗读列表理解?似乎我应该从中间开始“阅读”,然后阅读if条件(如果有),最后阅读表达式。
下面是我如何朗读下面这行代码,以便理解它:
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
对于列表x中的每个元素和列表y中的每个元素,如果这两个元素不同,将创建一个元组列表。
我正在努力的两个例子:你如何大声朗读下面的列表理解?
堆栈溢出:[x for b in a for x in b]
[[row[i] for row in matrix] for i in range(4)]
任何关于朗读列表理解的方法的建议或指示,以便使意图变得更加清晰,我们都非常感激。
发布于 2012-01-30 17:34:51
我通常会在脑海中将其展开为一个生成循环,例如
[(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
发布于 2012-01-30 17:32:37
“根据Q为真的Y和Z构造X的列表。”
https://stackoverflow.com/questions/9061760
复制相似问题