[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重置为列表的特定迭代的方式有哪些?我是否必须以其他方式进行?
谢谢您的时间
答案 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)