web-dev-qa-db-fra.com

comment incrémenter l'itérateur de l'intérieur de la boucle en 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

Je veux augmenter l'itérateur chaque fois que la commande d'envoi est exécutée. À l'heure actuelle, il n'augmente que de un lorsque la boucle for est exécutée. s'il vous plaît donnez votre avis 

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

J'ai couru ce code et il est sorti de 0 à 9. Je m'attendais à ce qu'il augmente l'itérateur de 2.

13
ilaunchpad

Enregistrez une copie de l'itérateur en tant qu'objet nommé. Ensuite, vous pouvez sauter si vous voulez.

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

Vous ne pouvez pas faire cela dans une boucle for. Parce que chaque fois que la boucle est redémarrée, elle réaffecte la variable i (même après l'avoir modifiée dans la boucle) et vous augmentez chaque fois la variable réaffectée. Si vous voulez faire cela, vous feriez mieux d'utiliser une boucle while et d'augmenter manuellement la variable à jeter.

>>> 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)

À côté de cela, si vous souhaitez augmenter la variable sur une période plutôt que de vous baser sur une condition particulière, vous pouvez utiliser un découpeur approprié pour découper l'itéré dans lequel vous passez en boucle.

Par exemple, si vous avez un itérateur, vous pouvez utiliser itertools.islice(). Si vous avez une liste, vous pouvez simplement utiliser les étapes lors de l'indexation (my_list[start:end:step]).

6
Kasrâmvd

range() a un troisième paramètre facultatif pour spécifier l'étape. Utilisez cela pour incrémenter le compteur de deux. Par exemple: 

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

La raison pour laquelle vous ne pouvez pas incrémenter i comme une variable normale est que, lorsque la boucle for commence à s'exécuter, une liste (ou un objet de plage en Python 3+) est créée, et i représente simplement chaque valeur de cet objet par incréments.

2
pzp

@ilaunchpad Désolé je sais qu'il est trop tard pour poster ceci mais voici ce que vous cherchiez

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

Vous ne devez pas utiliser la même variable tout au long de l'instruction For.

Output
vaibhav@vaibhav-Lenovo-G570:~$ python3 /home/vaibhav/Desktop/Python/pattern_test.py
0
2
4
6
8
10
12
14
16
18
increased i 20
1
user7422128