2015-08-28 8 views
11
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 

Desidero aumentare l'iteratore ogni volta che viene eseguito il comando di invio. Al momento aumenta solo di uno quando viene eseguito il ciclo for. Si prega di avvisarecome incrementare l'iteratore dall'interno per il ciclo in python 3?

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

ho eseguito questo codice e ha prodotto fuori da 0 a 9. mi aspettavo che aumenterebbe l'iteratore per 2.

+2

possibile duplicato di [Come cambiare indice del ciclo for in Python?] (Http://stackoverflow.com/questions/14785495/how-to-change-index-of-for-loop-in- python) – 101

risposta

4

Non puoi farlo all'interno di un ciclo for. Perché ogni volta che viene riavviato, il loop riassegna la variabile i (anche dopo averla modificata all'interno del loop) e ogni volta che si aumenta la variabile riassegnata. Se si desidera fare una cosa del genere è meglio usare un ciclo while e aumentare manualmente la variabile throwaway.

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

Accanto a questo, se si desidera aumentare la variabile su un periodo piuttosto che in base alcune condizioni particolari, è possibile utilizzare un doveroso affettatrici per affettare l'iterabile in cui si sta loop sopra.

Ad esempio se si dispone di un iteratore è possibile utilizzare itertools.islice() se si dispone di un elenco è sufficiente utilizzare i passaggi durante l'indicizzazione (my_list[start:end:step]).

+0

Per il secondo pezzo di codice, anche l'intervallo (0, 10, 3) dovrebbe funzionare. – user3757614

+0

@Kasramvd Grazie per il chiarimento. – ilaunchpad

+0

@ user3757614 Dato che OP vuole aumentare la variabile in base a una condizione, l'argomento 'step' in' range' non aiuta. – Kasramvd

10

Salva una copia dell'iteratore come oggetto con nome. Quindi puoi saltare se vuoi.

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

Questo non è molto utile quando OP vuole aumentare la variabile più di 1. E in realtà non è necessario rendere l'operazione sofisticata come quella quando possiamo semplicemente usare un ciclo 'while'. – Kasramvd

+0

@Kasramvd - questo è lo schema generale quando si lavora con gli iteratori.Può essere qualsiasi iteratore, non solo una sequenza di numeri crescente di 1. Se vuoi far avanzare l'iteratore di più di una posizione, chiama 'next()' più di una volta. Se vuoi veramente lavorare e manipolare i numeri indice direttamente come un ciclo for, non si dovrebbero usare iteratori ma un altro approccio (d'accordo). –

+0

Questo metodo non funziona quando si desidera eseguire iteratore su un elenco. – Kev1n91

1

range() ha un terzo parametro opzionale per specificare il passo. Usalo per incrementare il contatore di due. Per esempio:

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

La ragione per cui non si può incrementare i come una variabile normale è perché quando il ciclo for inizia ad eseguire, una lista (o di un oggetto Range in Python 3 +) è stato creato, e i solo rappresenta ciascun valore in quell'oggetto in modo incrementale.

-1

Ho scritto qualcosa del genere.

Ora sto avendo un controllo completo ma lo sfondo è che devo controllare tutte le condizioni.

0

@ilaunchpad dispiace so che è troppo tardi per questo post ma qui è quello che stavi cercando

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

Non si deve usare la stessa variabile per tutta la 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