【问题标题】: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有什么好处?

【问题讨论】:

    标签: python cycle itertools


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-04
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2015-08-24
        • 2021-12-19
        • 1970-01-01
        • 2018-01-16
        相关资源
        最近更新 更多