Python - 有没有类似于while循环中"continue"的方式来重新开始for循环?

16 投票
8 回答
104585 浏览
提问于 2025-04-16 04:06

基本上,我需要一种方法,在满足某个条件后,能够把控制权返回到for循环的开头,并且真正重新开始整个迭代过程

我想做的事情是这样的:

    for index, item in enumerate(list2):
    if item == '||' and list2[index-1] == '||':
        del list2[index]
        *<some action that resarts the whole process>*

这样,如果列表中包含['berry','||','||','||','pancake'],我最终会得到:

['berry','||','pancake']。

谢谢!

8 个回答

5

某个操作会重新启动整个过程

这样理解算法其实不太好。

你只是过滤,也就是去掉重复的东西。

而且在Python中,你最好是多做一些复制,而不是去用 del。一般来说,使用 del 的情况非常少。

def unique( some_list ):
    list_iter= iter(some_list)
    prev= list_iter.next()
    for item in list_iter:
        if item != prev:
            yield prev
            prev= item
    yield prev

list( unique( ['berry','||','||','||','pancake'] ) )
27
while True:
    for i in xrange(10):
        if condition(i):
            break
    else:
        break

这样做可以达到你想要的效果。不过,为什么你想这么做又是另外一回事了。也许你应该看看你的代码,确保没有忽略一些明显且更简单的方法。

44

我不太明白你说的“重启”是什么意思。你是想从头开始循环,还是只是跳过当前这次循环呢?

如果是后者的话,for 循环和 while 循环一样,都可以用 continue 来跳过当前的这次循环:

for i in xrange(10):
  if i == 5:
    continue
  print i

上面的代码会打印从 0 到 9 的数字,除了 5。

如果你是想从 for 循环的头开始重新来,那就只能“手动”去做,比如把它放在一个 while 循环里:

should_restart = True
while should_restart:
  should_restart = False
  for i in xrange(10):
    print i
    if i == 5:
      should_restart = True
      break

上面的代码会打印从 0 到 5 的数字,然后又从 0 开始重新来,一直这样循环下去(我知道这不是个很好的例子)。

撰写回答