【问题标题】:Python generator chaining refers to last iteration [duplicate]Python生成器链接是指最后一次迭代[重复]
【发布时间】:2018-11-01 01:49:24
【问题描述】:

在这段代码中:

x = [0]

for i in range(10):
    x = (a+i for a in x)

print(list(x)) # [90]

我正在链接生成器,以便一次迭代中的 x 使用前一个 x 的结果。但似乎所有的 x 生成器在最后一次迭代 (9) 中都使用了 i 的值。

如何使每个生成器在创建它们的迭代中使用 i 的值? (这样最终的结果就是 0 + 1 + 2 + 3 + 4 +...)

【问题讨论】:

  • 就是这样,谢谢@IljaEverilä。
  • 这是一个“为什么会这样”或“我该如何解决这个问题”的问题?因为在后一种情况下,我真的不明白为什么您首先要使用生成器,而不是在循环中使用列表推导,或者例如将循环反转为x = (a+sum(range(10)) for a in x)
  • 这是一个简化的例子。在我的实际代码中,将其转换为列表理解/反转循环很难,我需要迭代器的行为,因为数据可能不适合内存。无论如何,副本上的答案解决了我的问题。

标签: python iterator


【解决方案1】:

这是你想要的吗?

x = [0]

for i in range(10):
    x = [a+i for a in x]

print(x)

捷径:

x = [0]
x = sum([i for i in range(10)])
print(x)

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多