2010-04-20 2 views
15

È possibile in Python eseguire più contatori in un ciclo for singolo come in C/C++?Contatori multipli in un singolo ciclo: Python

Vorrei qualcosa come - for i,j in x,range(0,len(x)): So che Python interpreta questo in modo diverso e perché, ma come avrei eseguito due contatori di loop contemporaneamente in un ciclo for?

+2

parte (dal momento che probabilmente non si desidera utilizzarlo in questo caso): 'intervallo (0, len (x)) == range (len (x))' ' –

risposta

13

Si potrebbe desiderare di utilizzare zip

for i,j in zip(x,range(0,len(x))): 

Esempio,

>>> x = [1, 2, 3] 
>>> y = [4, 5, 6] 
>>> zipped = zip(x, y) 
>>> print zipped 
[(1, 4), (2, 5), (3, 6)] 
>>> for a,b in zipped: 
...  print a,b 
... 
1 4 
2 5 
3 6 
>>> 

Nota: La risposta corretta per questa domanda è enumerate come altri accennato, zip è opzione generale per avere più elementi in un singolo ciclo

+0

zip' è buono, ma in questo caso particolare, "enumerare" è il solito modo di fare ciò che vuole il poster originale. – EOL

27

Si desidera zip in generale, mentre ch combina due iteratori, come dice @ S.Mark. Ma in questo caso enumerate fa esattamente quello che ti serve, il che significa che non c'è bisogno di usare range direttamente:

for j, i in enumerate(x): 

Si noti che questo dà l'indice di x prima, così ho invertito j, i.