Изменения счетчика цикла for

Можно ли в цикле for изменять значения счетчика? К примеру:

for i in range(10): 
   if(i==5):
      i=8

Но при достижении i 5 значение на 8 не меняется. Начиная с новой итерации i, как и планировалось изначально, будет 6. Есть ли способы преодоления этого ограничения? Или только цикл while использовать для таких ситуаций?


Ответы (5 шт):

Автор решения: S. Nick

С помощью цикла for мы можем выполнить набор операторов один раз для каждого элемента в списке, кортеже, и т.д.

С помощью оператора continue мы можем остановить текущую итерацию цикла и продолжить следующую:

for i in range(10): 
    if i == 5 or i == 6 or i == 7:
        continue
    print(i)
→ Ссылка
Автор решения: n1tr0xs

Можно использовать while вместо for:

i = 0
while i<10:
    if i==5:
        i = 8
    # ваш код
    i += 1
→ Ссылка
Автор решения: Михаил Муругов
from itertools import chain

ranges = range(5), range(8, 10)

for i in chain.from_iterable(ranges):
    print(i)
→ Ссылка
Автор решения: CrazyElf

Саму переменную цикла менять без толку - на каждой новой итерации цикла for ей будет присвоено значение очередной итерации и все ваши изменения забудутся. Можно только пропустить какие-то значения с помощью continue, например, так:

for i in range(10): 
   if i in range(5, 8):
      continue
→ Ссылка
Автор решения: TigerTV.ru

Можно просто объединить интервалы:

print(*(i for i in list(range(5)) + list(range(8, 10))))

или так

for i in [*range(5),*range(8, 10)]:
    print(i)

или так

from itertools import chain
for i in chain(range(5), range(8, 10)):
    print(i)

... или

for i in set(range(10)).symmetric_difference(set(range(5,8))):
    print(i, end=' ')
→ Ссылка