在 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语言中,列表中能否包含元组,为啥?元组中能否包含列表,为啥? 谢谢大神