如何在 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)
我有一个重复的循环,我希望它在假设重复 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)