如何在 itertools 中进行特定次数的迭代后中断循环?

How to break cycle after a specific number of iterations in itertools?

我有一个重复的循环,我希望它在假设重复 5 次后停止重复:

from itertools import cycle
a = [1,2,3]

for i in cycle(a):
    print (i)
    if i == 5:
       break

我期望的是123,123,123,123,123。它在断裂前循环 5 次。相反,它会永远持续下去。我如何让它在继续下一个代码之前只循环 5 次?

在您的示例中,i 是列表 a 中的值之一,永远不可能是 5。对于这样的事情你应该使用 enumerate:

from itertools import cycle
a = [1,2,3]

for index, element in enumerate(cycle(a)):
    print (element)
    if index == 5 * len(a) - 1:
       break

您可以像@Selcuk 在他的回答中提到的那样使用 enumerate,或者您也可以使用 next 步进迭代器直到它达到给定的迭代次数。

import itertools
n = 5

a = [1,2,3]
g = itertools.cycle(a)

for i in range(n*len(a)):
    print(next(g))

您还可以查看 itertools.repeat() -

import itertools
n = 5

a = [1,2,3]
for i in itertools.repeat(a, 5):
    for j in i:
        print(j)

itertools提供所有这里的工具;只需包裹 islice 以限制输出数量(在本例中为输入数量的五倍):

from itertools import cycle, islice
a = [1,2,3]

for i in islice(cycle(a), 5*len(a)):  # Loops 15 times with a single value each time
    print(i)

# Or equivalently:
from itertools import chain, repeat

for i in chain.from_iterable(repeat(a, 5)):
    print(i)

如果您只想将 a 的全部内容重复三次(在每个循环中得到 [1, 2, 3] 而不是 1,然后 2,然后 3), 你会用 repeat 来代替:

from itertools import repeat
a = [1,2,3]

for x in repeat(a, 5):  # Loops five times, producing the same list over and over
    print(x)