【问题标题】:How can I skip specific iterations in a for loop?如何跳过 for 循环中的特定迭代?
【发布时间】:2014-08-30 20:12:41
【问题描述】:

基本上,我有一个嵌套的 for 循环。在内部循环中,发生了一些事情,我可以跳过 3、4、5 或者我需要跳过的许多迭代。但我不能对外循环做同样的事情。 希望这是有道理的。 这是我的代码:

phraseArray = []
phraseArray2 = []
counterAdd = 0
counter = 0

try:
    for i in range(len(wordArray)):
        for j in range(len(wordArray2)):
            if wordArray[i]==wordArray2[j]:
                counter = 0
                counter2=3
                while True:
                    if wordArray[i+counter]==wordArray2[j+counter]:
                        counter = counter+1
                        if counter==3:                                           
                            phraseArray.append(wordArray[i+0])
                            phraseArray.append(wordArray[i+1])
                            phraseArray.append(wordArray[i+2])
                        elif counter>3:
                            phraseArray.append(wordArray[i+counter2])
                            counter2 = counter2+1
                    else:
                         phraseArray.append(" ")
                         j=j+counter
                         break

except IndexError:
    print phraseArray2

j = j+1 用于跳过某些迭代。我不能对外循环做同样的事情,因为内循环改变了指示需要跳过多少次迭代的计数器变量。有什么建议吗?

提前谢谢各位! :)

【问题讨论】:

  • 为外循环维护另一个counter,并使用i += counter跳过?
  • 您应该将代码简化到重现问题所需的最低限度,并更明确地说明您希望跳过迭代的条件。也就是说,您可能对continue keyword 感兴趣。
  • 添加到ji 甚至不会完成任何事情,因为无论如何这些变量将在循环的下一次迭代中被重置。这不像 C 或 java 中的 for 循环。
  • 你想用你的代码解决什么问题?我觉得,有一个更简单的解决方案。

标签: python list loops iteration


【解决方案1】:

我会在这里使用迭代器。

import itertools

def skip(iterable, n):
    next(itertools.islice(iterable, n, n), None)

outer_numbers = iter(range(...))
for i in outer_numbers:
    inner_numbers = iter(range(...))
    for j in inner_numbers:
        if condition:
            skip(outer_numbers, 3)  # skip 3 items from the outer loop.
            skip(inner_numbers, 2)  # skip 2 items from the inner loop.

当然,您可能想要/需要continue 和/或break 语句。

【讨论】:

  • 函数“skip”中的islice方法是什么?
  • @ProSagramor -- 抱歉,应该是itertools.islice,而不仅仅是islice。 (我从 itertools 消费配方中复制得太近了)
【解决方案2】:

跳过循环的多次迭代的一般形式可以像这样工作。

skips = 0
for x in y:
    if skips:
        skips -= 1
        continue

    #do your stuff

    #maybe set skips = something

【讨论】:

    【解决方案3】:

    你不能在外循环中使用“break”,因为这将完成循环而不是跳过它,你可以做的是使用一些 IF 语句来控制你想要的情况。像

    if(condition=skip):
       #do nothing
    else:
      # do
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2021-11-15
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多