Itertools循环方法 - 为什么“while”循环?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Itertools循环方法 - 为什么“while”循环?相关的知识,希望对你有一定的参考价值。

回顾一下itertools.cycle的实现细节,在我看来,while循环用于重置生成器(带有yield的函数)并提供一个可迭代的无限重复,但如果是这种情况,则不要向上移动而up并删除方法的后半部分。假设他们比我聪明,我假设我错过了一些东西,虽然下面的第二个函数似乎与产生的词组,列表和字符串一起工作。

https://docs.python.org/3.7/library/itertools.html#itertools.cycle

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_huh(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    while True:
        for element in iterable:
            yield element

我肯定错过了什么?或者是可迭代类型,其中第一个是必需的,第二个会破坏它。

答案

如果iterable是一个生成器或其他适当的迭代器(而不是一个列表),那么它将在第一次通过for element in iterable循环时耗尽,随后通过这个循环将不会产生任何效果。你需要在第一次迭代时保存iterable的内容,以避免这种情况发生。

以上是关于Itertools循环方法 - 为什么“while”循环?的主要内容,如果未能解决你的问题,请参考以下文章

python 在itertools中使用product方法来避免嵌套for循环

Python标准库13 循环器 (itertools)

Python循环器-itertools

从 itertools.cycle 中提取一个列表

itertools.product 比嵌套 for 循环慢

vigenere密码中的itertools循环导致空间问题python