我正在避免使用while循环
在Java中,我可以做类似
的事情for (int i = 0; i < 10; i++){
if(.......) i = 0;
//this will reset i to 0
}
在python中,这不起作用:
j = 1
for i in range(j, n):
if .....:
j = 1
有没有办法可以重置j的值。
注意:while循环可以解决我的问题,但我不想使用它。感谢
答案 0 :(得分:0)
在python3中range(..)
返回范围对象,即使它不能像生成器一样耗尽,也是不可变的,你无法倒回它。
您可以查看Resetting generator object in Python - 有关于此的更多信息以及一些绕过类似问题的方法
在python2 range(..)
中返回列表,但你仍然无法回退它,因为for i in range(..)
仍然按顺序迭代列表而i
只是列表中的单个值并覆盖{{ 1}}值不起作用,因为列表仍然引用相同的对象,而你刚刚更改i
变量点
答案 1 :(得分:0)
为此,您可以自己创建自己的生成器,以便能够修改其行为,例如:
class myRange:
def restartFrom(self, start):
self.start = start
def get(self, start, end):
self.start = start
while self.start != end:
yield self.start
self.start += 1
myRange = myRange()
for i in myRange.get(1,10):
print(i)
# Restart from the beginning when 6 is reached
if i == 6:
myRange.restartFrom(0)
# It prints: 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 ...