Как сделать так, чтобы индекс в «для» l oop прыгал вперед на N - PullRequest
1 голос
/ 28 января 2020

Я хочу, чтобы l oop изменил свое поведение при пропуске

Например, заставить его перескакивать каждый третий индекс на еще 2 позиции?

for i in range(n):
   if i % 3 == 0:
     print('found i div by 3, jump 2 positions forward')
     i = i + 2

Это не работает.

Проходит через каждые i в диапазоне от 0 до n.

Ответы [ 4 ]

5 голосов
/ 28 января 2020

Вы можете использовать какое-то время l oop,

i = 0
while i < n:
   if i % 3 == 0:
     print('found i div by 3, jump 2 positions forward')
     i = i + 2
     continue
   i = i + 1
3 голосов
/ 28 января 2020
  1. если вы просто хотите шаг, отличный от 1, у range есть параметр для этого, просто вызовите range(0, 10, 3), и он будет повторяться от 0 (включительно) до 10 (исключительно), увеличиваясь на 3 каждый раз вместо 1

  2. , если вы хотите сделать что-то еще, и условие пропуска - динамическое c, не используйте итераторы, управляйте вашим l oop вручную (используя while и явный счетчик), вот что я бы порекомендовал здесь

  3. в качестве альтернативы (2) вы можете связываться с самим итератором, a for l oop desugars:

    it = iter(range(n))
    while True:
        try:
            i = next(it)
        except StopIteration:
            break
        ...
    

    , поэтому, если вы получите it вручную и сохраните ссылку на него, вы можете вызвать next для него явно, чтобы пропустить:

    it = iter(range(n))
    for i in it:
        if i % 3 == 0:
            print('found i div by 3, jump 2 positions forward')
            next(it, None); next(it, None)
    

    Я бы не рекомендовал бы второй стиль, первый уже говорит читателю заранее, что вы делаете что-то странное, и он делает это простым способом.

3 голосов
/ 28 января 2020

Вы можете указать размер шага в for l oop, если хотите, чтобы значения делились на 3

for i in range(0, n, 3):
    print(i)

Вывод:

0
3
6
0 голосов
/ 28 января 2020

Мы также можем использовать оператор среза [::], чтобы изменить исходный диапазон в соответствии с условием

l= range(n)

for i in l:
    if i%3 == 0:
        print('found i div by 3, jump 2 positions forward')
        l = l[::2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...