嵌套列表理解/合并嵌套列表

2024-04-19 06:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在理解嵌套列表理解结构时遇到问题。你知道吗

我有一张单子

>>> test
[[1, 2, 3], [4, 5], [6, 7, 8]]

如果我这样做了

t2=[]
for x in test:
    for y in x:
        t2.append(y)

然后它就回来了

>>> t2
[1, 2, 3, 4, 5, 6, 7, 8]

这正是我想要的。但为什么我不能呢

t3=[y for y in x for x in test]

这让我

>>> t3
[6, 6, 6, 7, 7, 7, 8, 8, 8]

有人能解释为什么t3和t2不一样吗?我怎样才能写出一个列表理解表达式,让我得到与t2相同的结果呢?非常感谢你的帮助!你知道吗


Tags: intest列表for表达式结构单子t3
3条回答

您需要反转for循环:

t3 = [y for x in test for y in x]

否则(如果事先没有运行多行版本!)x未定义。您的代码只是侥幸运行的-x仍然是上一个for循环结束时的状态,因此您的结果是正确的。你知道吗

在代码中,在开始之前,x = [6, 7, 8]来自上一个循环(jonsharpe指出)。你知道吗

因此,它是这样展开的:

for y in x:
    for x in test:
        t3.append(y)

第一个循环中的x指向[6, 7, 8],然后重新分配,但这不会更改第一个循环中使用的引用。如果第二个x有一个不同的名称,结果将是相同的。你知道吗

列表理解中的for ... in ...子句需要按照相同的顺序排列,就像它们对于循环是正常的一样:

>>> test = [[1, 2, 3], [4, 5], [6, 7, 8]]
>>> t3 = [y for x in test for y in x]
>>> t3
[1, 2, 3, 4, 5, 6, 7, 8]
>>>

相关问题 更多 >