首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在迭代工具中经过特定次数的迭代后中断循环?

如何在迭代工具中经过特定次数的迭代后中断循环?
EN

Stack Overflow用户
提问于 2020-10-14 22:50:23
回答 3查看 947关注 0票数 1

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

代码语言:javascript
复制
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次呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-14 23:15:12

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-10-14 22:52:10

在您的示例中,i是列表a中的一个值,永远不可能是5。您应该在以下方面使用enumerate

代码语言:javascript
复制
from itertools import cycle
a = [1,2,3]

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

Stack Overflow用户

发布于 2020-10-14 23:07:32

您可以使用@Selcuk在回答中提到的枚举,也可以使用next对迭代器进行分步,直到迭代器达到给定的迭代次数为止。

代码语言:javascript
复制
import itertools
n = 5

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

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

你也可以看看itertools.repeat() -

代码语言:javascript
复制
import itertools
n = 5

a = [1,2,3]
for i in itertools.repeat(a, 5):
    for j in i:
        print(j)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64362539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档