Ответ 1
Сохраните копию итератора как именованный объект. Затем вы можете пропустить вперед, если хотите.
>>> myiter = iter(range(0, 10))
>>> for i in myiter:
print(i)
next(myiter, None)
...
0
2
4
6
8
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.
Сохраните копию итератора как именованный объект. Затем вы можете пропустить вперед, если хотите.
>>> myiter = iter(range(0, 10))
>>> for i in myiter:
print(i)
next(myiter, None)
...
0
2
4
6
8
Вы не можете сделать это внутри цикла 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]
).
range()
имеет необязательный третий параметр для указания шага. Используйте это, чтобы увеличить счетчик на два. Например:
for i in range(0, 10, 2):
print(i)
print("increased i", i)
Причина, по которой вы не можете увеличивать i
как нормальная переменная, заключается в том, что при запуске for-цикла создается список (или объект диапазона в Python 3+), и i
просто представляю каждое значение в этом объекте постепенно.
@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
Я написал что-то вроде этого.
while True:
if l < 5:
print "l in while", l
l += 1
else:
break
Теперь у меня полный контроль, но на заднем плане я должен проверить все условия.