如何朗读Python列表理解?

Ram*_*han 22 python list-comprehension

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

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

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

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
Run Code Online (Sandbox Code Playgroud)

"对于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)]

任何有关朗读列表理解的方法的建议或指示,以使意图变得更清晰,我们非常感激.

And*_*Dog 33

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

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
Run Code Online (Sandbox Code Playgroud)

是生成器的列表理解

for x in [1,2,3]:
    for y in [3,1,4]:
        if x != y:
            yield (x, y)
Run Code Online (Sandbox Code Playgroud)

示例#1

[x for b in a for x in b] 是理解

for b in a:
    for x in b:
        yield x
Run Code Online (Sandbox Code Playgroud)

示例结果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]
Run Code Online (Sandbox Code Playgroud)

这是展开的

for i in range(4):
    l = []

    for row in matrix:
        l.append(row[i])

    yield l
Run Code Online (Sandbox Code Playgroud)