在python中重置Range(start,end)中for循环的起始值

时间:2018-06-06 11:33:06

标签: python loops

我正在避免使用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循环可以解决我的问题,但我不想使用它。感谢

2 个答案:

答案 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 ...