【发布时间】:2021-11-18 02:24:33
【问题描述】:
考虑以下代码:
import more_itertools as mo
def rep(x, n):
for i in range(n):
yield x
xs = [0]
for n in [1, 2, 3]:
xs = mo.flatten(rep(x, n) for x in xs)
print(mo.ilen(xs))
真正的答案应该是 6,但为什么会打印 27?
请注意,more_itertools.flatten 做了显而易见的事情,实际上是 itertools.chain.from_iterable 的别名。 more_itertools.ilen 也做了显而易见的事情,只计算元素。我认为所涉及的功能没有任何错误,只是重新签名xs。
【问题讨论】:
-
kaya3 是正确的,如果您想进一步证明,您可以在
print(mo.ilen(xs))之前插入将n分配给其他内容的行,您将看到结果相应更改(导致n**3)。