как увеличить итератор изнутри для цикла в python 3?

for i in range (0, 81):
    output = send command
    while True:
        last_byte = last_byte - offset
    if last_byte > offset:
       output = send command
       i+
    else:
        output = send command
        i+
        break

Я хочу увеличить итератор каждый раз, когда выполняется команда send. Сейчас он только увеличивается на единицу, когда цикл for выполняется. пожалуйста, порекомендуйте

for i in range(0,10):
    print(i)
    i +=2
    print("increased i", i)

Я запустил этот код, и он появился с 0 до 9. Я ожидал, что он увеличит итератор на 2.

Ответ 1

Сохраните копию итератора как именованный объект. Затем вы можете пропустить вперед, если хотите.

>>> myiter = iter(range(0, 10))
>>> for i in myiter:
    print(i)
    next(myiter, None)
...
0
2
4
6
8

Ответ 2

Вы не можете сделать это внутри цикла for. Поскольку каждый раз, когда цикл перезапускается, он переназначает переменную i (даже после ее изменения внутри цикла) и каждый раз, когда вы просто увеличиваете переназначенную переменную. Если вы хотите сделать такую вещь лучше использовать while цикл и увеличить переменную вручную одноразовые.

>>> i=0
>>> while i< 10 :
...     print(i)
...     i +=2
...     print("increased i", i)
... 
0
('increased i', 2)
2
('increased i', 4)
4
('increased i', 6)
6
('increased i', 8)
8
('increased i', 10)

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

Например, если у вас есть итератор, вы можете использовать itertools.islice() если у вас есть список, вы можете просто использовать шаги при индексировании (my_list[start:end:step]).

Ответ 3

range() имеет необязательный третий параметр для указания шага. Используйте это, чтобы увеличить счетчик на два. Например:

for i in range(0, 10, 2):
    print(i)
    print("increased i", i)

Причина, по которой вы не можете увеличивать i как нормальная переменная, заключается в том, что при запуске for-цикла создается список (или объект диапазона в Python 3+), и i просто представляю каждое значение в этом объекте постепенно.

Ответ 4

@ilaunchpad Извините, я знаю, что слишком поздно, чтобы опубликовать это, но вот что вы искали

i=0
for J    in range(0,10):
    print(i)
    i = i + 2
print("increased i", i)

Вы не должны использовать одну и ту же переменную в инструкции For.

Output
[email protected]:~$ python3 /home/vaibhav/Desktop/Python/pattern_test.py
0
2
4
6
8
10
12
14
16
18
increased i 20

Ответ 5

Я написал что-то вроде этого.

    while True:
        if l < 5:
            print "l in while", l
            l += 1
        else:
            break

Теперь у меня полный контроль, но на заднем плане я должен проверить все условия.