gpt4 book ai didi

python - 在 xrange 对象上调用多个迭代器

转载 作者:太空狗 更新时间:2023-10-29 21:40:04 26 4
gpt4 key购买 nike

为什么

zip(*[xrange(5)]*2)

给出 [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] 但是

zip(*[iter(xrange(5))]*2)

给出 [(0, 1), (2, 3)]?

我一直认为生成器是迭代器,所以生成器上的 iter 是空操作。

例如,

list(iter(xrange(5)))
[0, 1, 2, 3, 4]

相同
list(xrange(5))
[0, 1, 2, 3, 4]

(对于 Python 3 也是如此,但是使用 list(zip(range。)

最佳答案

iterableiterator 之间是有区别的。您可以使用 iter(x) 为任何给定的可迭代 x 构建迭代器。迭代器封装了迭代的状态,而可迭代对象是您可以从中创建新迭代器的东西。

xrange() 是可迭代对象,但不是迭代器。您可以为单个 xrange() 对象创建多个迭代器,每个迭代器都有自己的位置。

zip() 函数在其每个参数上隐式调用 iter()。对于 zip(*[xrange(5)]*2),这将为相同的 xrange() 对象创建两个迭代器,每个迭代器都有自己的迭代状态。对于 zip(*[iter(xrange(5))]*2),您已经两次传入同一个迭代器。在迭代器上调用 iter() 只会返回迭代器本身,因此在这种情况下您最终只会得到一个迭代器。

关于python - 在 xrange 对象上调用多个迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670525/

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