- 此问题在此处已有答案**:
Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
12小时前关门了。
我希望使用itertools.chain
来高效地连接列表(记忆),但是我需要能够多次读取(或map
等)结果。
import itertools
a = itertools.chain([1, 2], [3, 4])
print list(a) # => [1, 2, 3, 4]
print list(a) # => []
避免此问题的最佳方法是什么?
2条答案
按热度按时间aiazj4mn1#
与所有生成器一样,您需要将其转换为列表并存储结果:
这是生成器的一个基本原理,它们只能生成一次序列。
此外,您不能简单地为记忆存储生成器,因为底层列表 * 可能会更改 。在几乎所有记忆用例中,您都应该存储列表;生成器通常只是一种有效转换或过滤底层序列的手段,并不代表你想要记忆的数据。这就好像你在存储一个函数,而不是它的输出。在你的特定情况下,如果你所做的一切都是使用
chain()
来连接现有的列表, 直接存储那些列表 *。请注意,这使生成器能够生成无限序列,因此在转换为列表时要小心。
o2gm4chl2#
尝试迭代工具。