在 Python 中,为啥 itertools.cycle 需要额外的内存? [复制]

Posted

技术标签:

【中文标题】在 Python 中,为啥 itertools.cycle 需要额外的内存? [复制]【英文标题】:In Python, why does itertools.cycle require additional memory? [duplicate]在 Python 中,为什么 itertools.cycle 需要额外的内存? [复制] 【发布时间】:2013-08-28 03:11:52 【问题描述】:

我很好奇itertools.cycle(iterable) 中的警告:

创建一个迭代器,从 可迭代并保存每个副本。当可迭代对象用尽时, 从保存的副本中返回元素。无限重复。

相当于:

def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element

该条目还包含警告,“注意,该工具包的该成员可能需要大量辅助存储(取决于可迭代的长度)。”

您不能通过以下方式避免额外的存储要求(以及一些复杂性):

def cycle(iterable):
    while True:
        for i in iterable:
            yield i

将用过的物品存放在saved有什么好处?

【问题讨论】:

【参考方案1】:

有些可迭代对象只能迭代一次。因此循环将存储一个副本,以便它可以继续读取这些项目。 见this related question。

【讨论】:

【参考方案2】:

iterable 可能是一些生成器,它执行昂贵的计算来生成元素。

通过缓存 iterable 的结果,您不必重复执行循环遍历 iterable 可能成本高昂且耗时的操作。

【讨论】:

以上是关于在 Python 中,为啥 itertools.cycle 需要额外的内存? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

急求!!!在python语言中,列表中能否包含元组,为啥?元组中能否包含列表,为啥? 谢谢大神

为啥我应该在 python 中使用类方法? [复制]

python - 为啥必须在递归中使用 return 语句?

为啥我不能在 python 中访问这个类成员?

在 Python 中,为啥属性优先于实例属性?

为啥我不能在 Python 中扩展 bool?