当前位置: 首页 > 面试题库 >

循环跳过多个迭代

龙华翰
2023-03-14
问题内容

我有一个循环列表,look到达后我想跳过3个元素。在此答案中,提出了一些建议,但我未能充分利用它们:

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
for sing in song:
    if sing == 'look':
        print sing
        continue
        continue
        continue
        continue
        print 'a' + sing
    print sing

四次continue当然是胡说八道,而四次next()是行不通的。

输出应如下所示:

always
look
aside
of
life

问题答案:

for用于iter(song)循环;您可以在自己的代码中执行此操作,然后在循环内推进迭代器;iter()再次调用iterable只会返回相同的iterable对象,因此您可以for在下一次迭代中紧跟着在循环内推进iterable

通过next()html" target="_blank">函数推进迭代器;
它可以在Python 2和3中正常工作,而无需调整语法:

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
    print sing
    if sing == 'look':
        next(song_iter)
        next(song_iter)
        next(song_iter)
        print 'a' + next(song_iter)

通过提高print sing阵容,我们也可以避免重复自己。

如果可迭代的值超出范围,则使用next()这种方法 引发StopIteration异常。

您可以捕获该异常,但是提供next()第二个参数(忽略该异常并返回默认值的默认值)会更容易:

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
    print sing
    if sing == 'look':
        next(song_iter, None)
        next(song_iter, None)
        next(song_iter, None)
        print 'a' + next(song_iter, '')

我通常会itertools.islice()跳过3个元素;保存重复的next()呼叫:

from itertools import islice

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
    print sing
    if sing == 'look':
        print 'a' + next(islice(song_iter, 3, 4), '')

islice(song_iter, 3, 4)迭代将跳过3个元素,然后返回4,然后来完成。next()因此,调用该对象会从中检索第4个元素song_iter()

演示:

>>> from itertools import islice
>>> song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
>>> song_iter = iter(song)
>>> for sing in song_iter:
...     print sing
...     if sing == 'look':
...         print 'a' + next(islice(song_iter, 3, 4), '')
... 
always
look
aside
of
life


 类似资料:
  • 问题内容: 我的代码产生了意外的结果。看来我的for循环跳过了第一次迭代,我不明白为什么。 返回…(假设输入的数字是姓名) 为什么第一个get.nextLine()被跳过? 问题答案: 当前,您对Scanner#nextInt的调用不占用换行符,因此将其传递给您的第一次调用,因此 不会 阻塞。 您将需要添加 通话后,您的第一个通话将阻止。

  • 有没有一种优雅的方法可以跳过while-loop中的迭代? 我想做的是

  • 问题内容: 给定以下代码(不起作用): 有没有办法使这项工作?或者,如果用户满意,我是否需要做一次检查以打破输入循环,然后再进行另一项(更受限制的)签入外部循环以一起打破? 问题答案: 我的第一个直觉是将嵌套循环重构为一个函数,然后使用它来分解。

  • 本节我们探索的主题是迭代与循环。循环通常在计算机编程用用于自动执行重复性任务。 在Python中最常用的迭代形式就是for循环了。for循环允许你迭代出列表中所有的项,迭代出来后你可以做任何你想做的事情。 比如,我们创建了一个列表,并打印出其中所有元素的平方。 >>> for value in [0, 1, 2, 3, 4, 5]: ... print(value * value) ... 0 1

  • 我将获取一个用户列表作为数组,对数据进行分页,并以表格的形式显示在视图中。 为了迭代数组,我使用 foreach 循环。但是我的前循环迭代不起作用。 这是一个示例数组,当我执行< code>print_r()时,我有< code>id、< code>email和< code>full_name字段,我想在视图中显示它们 这是我迭代数组的视图部分。结果存储在< code>$userList中。这个数

  • 考虑这个简单的C++函数来计算数组的前缀和: 它是4个融合的UOP1,这个CPU可以支持4个融合的OPs/周期。 有通过和携带的依赖链,每个都是一个循环,但是这些UOP可以到4个ALU端口中的任何一个,所以似乎不太可能冲突。融合的需要转到p6,这是一个更令人担忧的问题,但我只测量到p6的1.1 UOPS/迭代。这将解释每次迭代1.1个循环,但不是1.4个循环。如果我将循环展开2倍,端口压力会低得多