【问题标题】:Nested list comprehension not the same as nested for loop [duplicate]嵌套列表理解与嵌套 for 循环不同[重复]
【发布时间】:2020-05-11 20:37:59
【问题描述】:

我有以下嵌套循环:

for i in range(1,5): 
        for j in range(0,i):
                j

当我尝试使用列表理解重新表达相同的结果时,我得到了奇怪的结果

[j for j in range(0,i) for i in range(1,5)]

首先,有人可以用这个列表理解来解释输出吗?我似乎真的无法理解 Python 在这里做什么。

其次,内部for的迭代器能否不显式依赖外部索引?

第三,有没有什么办法可以修改列表推导式,得到和开头写的嵌套for循环一样的结果?

【问题讨论】:

  • 在列表理解中交换循环的顺序。
  • @MateenUlhaq 好的,谢谢。

标签: python for-loop list-comprehension nested-loops


【解决方案1】:

您的列表解析不会做任何事情,因为如果没有 i 已经在列表解析之外定义,它就不会运行。

要实现您想要的(是的,这是违反直觉的),您需要这样做:

[j  for i in range(1,5) for j in range(0,i)]

这将产生:

[0, 0, 1, 0, 1, 2, 0, 1, 2, 3]

这与您的嵌套 for 循环的顺序相同。

【讨论】:

  • 它确实编译
  • 如果 i 尚未定义,则不会。
  • 什么?同样,它会编译,否则它不会引发运行时错误
  • 这是编程,都是扯头发。
  • 我猜你在定义 i 之上已经有另一个 for 循环,或者使用 i 在同一个控制台中运行了一些东西。如果你启动一个新的 python 控制台并运行你的代码,你会发现 python 无法运行你原来的列表理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 2014-11-18
相关资源
最近更新 更多