python 如何存储itertools.chain并多次使用它?[duplicate]

bqucvtff  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(118)
    • 此问题在此处已有答案**:

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) # => []

避免此问题的最佳方法是什么?

aiazj4mn

aiazj4mn1#

与所有生成器一样,您需要将其转换为列表并存储结果:

a = list(a)

这是生成器的一个基本原理,它们只能生成一次序列。
此外,您不能简单地为记忆存储生成器,因为底层列表 * 可能会更改 。在几乎所有记忆用例中,您都应该存储列表;生成器通常只是一种有效转换或过滤底层序列的手段,并不代表你想要记忆的数据。这就好像你在存储一个函数,而不是它的输出。在你的特定情况下,如果你所做的一切都是使用chain()来连接现有的列表, 直接存储那些列表 *。
请注意,这使生成器能够生成无限序列,因此在转换为列表时要小心。

o2gm4chl

o2gm4chl2#

尝试迭代工具。

import itertools
a = itertools.chain([1, 2], [3, 4])
a, b = itertools.tee(a)
print list(b) # => [1, 2, 3, 4]
a, b = itertools.tee(a)
print list(b) # => [1, 2, 3, 4]

相关问题