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

问题描述

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

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

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

我期望的是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在其答案中提到的枚举,也可以使用next来逐步执行迭代器,直到达到给定的迭代次数为止。

import itertools
n = 5

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

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

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

import itertools
n = 5

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

itertools在此处提供 all 个工具;只需包装islice即可限制输出数量(在这种情况下为输入数量的五倍):

from itertools import cycle,islice
a = [1,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,3]而不是1,则依次是23 ),请改用repeat

from itertools import repeat
a = [1,3]

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...