сброс начального значения цикла for в Range (начало, конец) в Python - PullRequest
0 голосов
/ 06 июня 2018

Я избегаю использования цикла 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 голосов
/ 06 июня 2018

Для этого вы можете создать свой собственный генератор, чтобы иметь возможность изменять его поведение, например, следующим образом:

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 ...
0 голосов
/ 06 июня 2018

В python3 range(..) возвращает объект диапазона, который, хотя он и не может быть исчерпан как генераторы, является неизменным, и вы не можете перемотать его.

Может быть, вы можете посмотреть в Сброс объекта генератора в Python - есть дополнительная информация об этом и некоторые методы, чтобы обойти подобные проблемы

В python2 range(..) возвращает список, но вы все еще не можете перемотать его, потому что for i in range(..)все еще последовательно перебирает список, и i - это просто одно значение из списка, а переопределение значения i не будет работать, поскольку список по-прежнему ссылается на тот же объект, в то время как вы только что изменили, где i точка переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...