问题描述
我有一个重复的循环,我希望它在重复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
,则依次是2
和3
),请改用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)