我想使用 itertools.chain
来有效地连接列表(内存),但我需要能够读取(或 map
等)结果多次。这个例子说明了这个问题:
import itertools
a = itertools.chain([1, 2], [3, 4])
print list(a) # => [1, 2, 3, 4]
print list(a) # => []
避免此问题的最佳方法是什么?
最佳答案
与所有生成器一样,您需要将其转换为列表并存储该结果:
a = list(a)
这是生成器的一个基本原则,它们被期望只产生它们的序列一次。
此外,您不能简单地存储一个用于内存目的的生成器,因为底层列表可能会改变。在几乎所有的内存用例中,您都应该存储列表;生成器通常只是一种有效地转换或过滤底层序列的手段,并不代表您要内存的数据本身。就好像你在存储一个函数,而不是它的输出。在您的特定情况下,如果您所做的一切都是使用 chain()
连接现有列表,直接存储这些列表。
请注意,这使生成器能够生成无穷无尽的序列,因此在转换为列表时要小心。
关于python - 如何存储 itertools.chain 并多次使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156518/