如何朗读Python列表理解?

时间:2012-01-30 09:30:24

标签: python list-comprehension

我的问题是Python 列表理解可读性。当我遇到具有复杂/嵌套列表推导的代码时,我发现为了理解意图,我必须多次重读它们。

是否有直观的方式来朗读列表理解?好像我应该从中间开始“阅读”,然后阅读 if 条件(如果有的话),并阅读 表达式 最后。

以下是我如何大声阅读以下代码行,以便理解它:

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

“对于List x中的每个元素,以及List y中的每个元素,如果两个元素不相同创建一个列表的元组。”

我正在努力的两个例子: 你会如何大声朗读以下列表理解?

  1. 来自Stack Overflow中的另一个问题:[x for b in a for x in b]

  2. Python文档有这个例子: [[row[i] for row in matrix] for i in range(4)]

  3. 非常感谢任何有关大声朗读列表理解的建议或指示,以使意图变得更加清晰。

2 个答案:

答案 0 :(得分:32)

我通常会在脑海中展现出一个生成循环,例如

[(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

答案 1 :(得分:3)

“构建一个基于Y和Z的X列表,其中Q为真。”