2014-10-16 6 views
3

Можно ли увеличить цикл for внутри цикла в python 3?Увеличение цикла for внутри цикла

, например:

for i in range(0, len(foo_list)): 
    if foo_list[i] < bar 
     i += 4 

Если счетчик i цикл получает приращение на 4, если условие выполняется, иначе это будет просто приращение на единицу (или что-то значение шага для для цикла)?

Я знаю, что цикл while будет более применим для такого приложения, но было бы полезно знать, возможно ли это (или что-то подобное) в цикле for.

Спасибо!

+1

это может быть х года проблема: я не уверен, почему вы Wouldnt просто обработать ваш список лучше, прежде чем вы итерацию над ним. также посмотрите на это: 'for i, item_in_list в enumerate (foo_list): print (i, item_in_list)' – TehTris

ответ

7

Вы можете использовать время цикла и увеличения i исходя из условия:

while i < (len(foo_list)): 
    if foo_list[i] < bar: # if condition is True increment by 4 
     i += 4 
    else: 
     i += 1 # else just increment 1 by one and check next `foo_list[i]` 

Использование для цикла i всегда будет возвращаться к Следующее значение в диапазоне:

foo_list = [1,2,3,4,5,6] 
bar = 6 
for i in range(len(foo_list)): 
    print("range i ",i) 
    if foo_list[i] < bar: 
     i += 4 
     print("if i",i) 


('range i ', 0) 
('if i', 4) 
('range i ', 1) 
('if i', 5) 
('range i ', 2) 
('if i', 6) 
('range i ', 3) 
('if i', 7) 
('range i ', 4) 
('if i', 8) 
('range i ', 5) 
+0

Я знаю, что мой примерный код не работает так, как он должен. Я пытался проиллюстрировать, что я имел в виду, увеличивая цикл более чем на 1. Спасибо за ваш ответ, хотя! – Kestrel

+0

Без проблем, пожалуйста. –

0
while i < end: 
    # do stuff 
    # maybe i +=1 
    # or maybe i += 4 

Я полагаю, вы могли бы сделать это в цикле, если попытаетесь, но это нецелесообразно. Весь смысл питона для цикла, чтобы посмотреть на предметы, а не индексы

1

в вашем примере, как написано i будет обнулен при каждой новой итерации цикла (который может показаться немного нелогичным), как показано здесь:

foo_list = [1, 2, 3] 

for i in range(len(foo_list)): 
    print('Before increment:', i) 
    i += 4 
    print('After increment', i) 

>>> 
Before increment: 0 
After increment 4 
Before increment: 1 
After increment 5 
Before increment: 2 
After increment 6 

continue стандартный/безопасный способ перехода к следующей одной итерации цикла, но это было бы гораздо более неудобной цепь continues вместе, чем просто использовать while цикл, как другие предложили.

1

немного хак ...

>>> b = iter(range(10)) 
>>> for i in b: 
...  print(i) 
...  if i==5 : i = next(b) 
... 
0 
1 
2 
3 
4 
5 
7 
8 
9 
>>> 
Смежные вопросы