重新启动循环遍历列表python3

时间:2018-07-20 14:54:46

标签: python python-3.x list for-loop

[python] 3.6
您好,我试图用for循环遍历列表,每当条件确定时,我都必须重新启动循环。 在C语言中,我会这样做:
public class window extends JFrame { public window() { add(new Board()); setResizable(true); pack(); setTitle("Game"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); } public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame ex = new window(); ex.setVisible(true); ex.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent windowEvent) { //ex.Board.data System.exit(0); } }); }); }}

我在这里尝试这样做:

for(i = 0; i < 10; i++){
    if(list[i] == something)
        i = 0;
 }

无法正常工作。将for重置为列表的特定迭代的方式有哪些?我是否必须以其他方式进行?
谢谢您的时间

4 个答案:

答案 0 :(得分:3)

您可以只使用while循环:

i = 0
while i < 10:
    print("do something", i)
    if random.random() < 0.2:
        print("reset")
        i = -1
    i += 1

特定于您的示例:

i = 0
while i < len(listPrimes):
    x = listPrimes[i]
    if num % x == 0:
        num /= x
        factorials.append(x)
        i = -1
    i += 1

答案 1 :(得分:1)

您可以像使用C代码一样使用while循环。

while i < 10: if list[i] == something: i = 0 i += 1

答案 2 :(得分:0)

使用itertools.takewhile实用程序

这是一个人为的例子:

import itertools

li = [1,2,3,4,5]
for i in range(1, 6):
        print(list(itertools.takewhile(lambda x: x!=i, li)))
        print("new cycle")

输出:

[]
new cycle
[1]
new cycle
[1, 2]
new cycle
[1, 2, 3]
new cycle
[1, 2, 3, 4]
new cycle

答案 3 :(得分:0)

while循环是最优雅的解决方案。为了完整起见,您可以将 list 包装到自定义的 generator 中,然后让此新的 iterable 接收信号以重置循环。

import time

def resetable_generator(li):
    while True:
        for item in li:
            reset = yield item
            if reset:
                break
        else:
            raise StopIteration


x = range(10)
sum = 0
r = resetable_generator(x)
for item in r:
    time.sleep(1)
    sum += item
    if item == 6:
        sum += r.send(True)
    print(sum)