python - 如何存储 itertools.chain 并多次使用它?

标签 python memoization python-itertools

我想使用 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/

相关文章:

python - 如何使用pandas将多列转换为行

python - 如何让python以普通用户而不是root用户身份打开新终端

Python func_dict 用于内存;其他有用的技巧?

python - 如何在删除项目的同时循环遍历 Python 列表,直到没有剩余项目为止

python - 名为条件前瞻的正则表达式(Python 中)

python - 急切模式下的 TFP 精确 GP 回归

c++ - 为递归函数实现DP

haskell - 将命令式内存代码翻译成 Haskell

python - 使用numpy数组时如何处理itertools.product?

python - 'itertools' 文件在哪里