2016-06-16 4 views
1

У меня есть следующий код:Как пропустить одиночную итерацию цикла в python?

for i in list1: 
    if i == 5: 
     #skip the NEXT iteration (not the end of this one) 
    else: 
     #do something 

Как пропустить итерации, которая приходит после итерации, которая бросает пропуск. Например, если list1=[1, 2, 3, 4, 5, 6, 7], цикл пропустит 6 и перейдет прямо к 7, потому что 5 вызвали пропуски . Я видел this вопрос и несколько других, но все они имеют дело с пропуском текущей итераций, в то время как я хочу пропустить следующий итерация. Ответы на эти вопросы предлагают continue, которые, насколько я могу судить, остановят оставшуюся часть текущей итерации и перейдут к следующему, чего я не хочу. Как я могу пропустить одну итерацию в цикле?

Редактировать: Было предложено использовать next(), но это не работает для меня. Когда я запускаю следующий код:

a = [1, 2, 3, 4, 5, 6, 7, 8] 
ai = iter(a) 
for i in a: 
    print i 
    if i == 5: 
     _ = next(ai) 

я

1 
2 
3 
4 
5 
6 #this should not be here 
7 
8 

Использование next() также предложение в этом вопросе: Skip multiple iterations in loop python

+0

Есть ваша ошибка: 'for i in a:'. Должно быть 'for i in ai:' –

ответ

5

В списке можно найти номер iterator. При этом, вы можете мутировать элементы контура во время цикла:

it = iter(list1) 
for i in it: 
    if i == 5: 
     next(it) # Does nothing, skips next item 
    else: 
     #do something 

В случае, если вы планируете использовать значение в i==5, вы должны do something до оценки состояния:

it = iter(list1) 
for i in it: 
    #do something 
    if i == 5: 
     next(it) # Does nothing, skips next item 

Если вы «делаем это в терминале, вы должны назначить следующий элемент переменной в качестве терминала может заставить AUTOPRINT на висячей ссылки:

>>> list1 = [1, 2, 3, 4, 5, 6, 7] 
>>> it = iter(list1) 
>>> for i in it: 
... print(i) 
... if i == 5: 
...  j = next(it) # here 
... 
1 
2 
3 
4 
5 
7 
+0

Это, похоже, фактически не пропускает следующую итерацию. Когда я добавляю 'print i' в первую строку цикла, он печатает 1, хотя 7, когда он должен печатать 1, 2, 3, 4, 5, 7, пропуская 6 – cat40

+0

Я не пользуюсь терминалом. Я написал и сохранил (и запустил) .py-файл – cat40

+0

И он по-прежнему не работает после того, как вы передали вывод переменной? –

0

Просто установите флаг:

>>> i 
[0, 1, 2, 3, 4, 5, 6, 7] 
>>> skip = False 
>>> for q in i: 
... if skip: 
...  skip = False 
...  continue 
... if q == 5: 
...  skip = True 
... print(q) 
... 
0 
1 
2 
3 
4 
5 
7 
0
runNext = True 
for i in list1: 
    if i == 5: 
     runNext = False 
    else: 
     if runNext: 
      #do something 
     runNext = False 
+0

Вот что я уже делаю. Есть ли лучший метод? – cat40

Смежные вопросы