gpt4 book ai didi

Python:为什么 2D 列表理解需要在内循环之前先外循环?

转载 作者:行者123 更新时间:2023-11-28 21:33:13 25 4
gpt4 key购买 nike

table = [[1, 11, 111], [2, 22, 222], [3, 33, 333]]
[cell for cell in row for row in table] # Error
[cell for row in table for cell in row] # [1, 11, 111, 2, 22, 222, 3, 33, 333]

直观上,第一个列表理解更有意义。它从特定转向不太特定,即单元格 -> 行 -> 表。 (我发现 Python 列表推导式真的很奇怪,它应该是表 -> 行 -> 单元格,但我离题了。)

单元格 -> 表 -> 行背后的逻辑是什么?解析器如何看待这一点?

最佳答案

for 循环的含义与您以“正常”方式编写它们时相同:

for row in table:
for cell in row:
print(cell)

因此,当您将其拉入列表理解时,您将按原样保留循环(除了删除“:”),并将最终表达式拉到开头:

# you can actually "abuse" list comprehensions to have short
# loops like this, even if you don't care about the list being
# generated. It's generally not a great practice though
[print(cell) for row in table for cell in row]

我承认,当您从左到右阅读代码时,会有点困惑。您只需要记住先阅读循环,然后将开始语句放在最后。我想它可以被实现为

[for row in table for cell in row cell]

但我认为这看起来更令人困惑;很难判断第二个循环从哪里结束以及其中的语句从哪里开始。最终,这是一个设计决策,尽管我确信有些人会发现其中一种方法更直观。

关于Python:为什么 2D 列表理解需要在内循环之前先外循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com