如何朗读Python列表推导式?

24 投票
2 回答
4721 浏览
提问于 2025-04-17 11:56

我想问的是关于Python中列表推导式的可读性。当我看到复杂或嵌套的列表推导式代码时,常常需要反复阅读几遍才能理解它的意思。

有没有一种直观的方法可以朗读列表推导式?我觉得应该从中间开始“阅读”,然后再读if条件(如果有的话),最后再读表达式

以下是我为了理解这行代码而朗读的方式:

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

“对于列表x中的每个元素,以及列表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)]

如果有任何建议或提示,能让朗读列表推导式的意图更清晰,我将非常感激。

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

撰写回答