如何在for循环中跳过特定迭代?

3 投票
3 回答
1268 浏览
提问于 2025-04-18 12:40

基本上,我有一个嵌套的循环,也就是一个循环里面还有一个循环。在里面的循环中,会发生一些事情,我可以跳过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 是用来跳过某些循环次数的。我不能对外面的循环做同样的事情,因为里面的循环会改变计数器的变量,这个变量决定了需要跳过多少次循环。有什么建议吗?

提前谢谢大家!:)

3 个回答

2

你不能在外层循环中使用“break”,因为这样会结束整个循环,而不是跳过它。你可以使用一些IF语句来控制你想要的情况。可以这样做:

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

跳过循环中多次迭代的一种通用方法可以这样实现。

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

    #do your stuff

    #maybe set skips = something
3

在这里,我会使用迭代器。

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 语句。

撰写回答