在itertools中,如何在特定次数的迭代后打破循环?

2024-05-21 05:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个重复的循环,我希望它在重复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次


Tags: 代码infromimportforifprintitertools
3条回答

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)

在您的示例中i是列表a中的一个值,不能是5。您应该使用^{}进行以下操作:

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)

相关问题 更多 >