2009-02-23 10 views
9

Quindi vedo nello another post il seguente snippet "cattivo", ma le uniche alternative che ho visto riguardano la patch di Python.Alternativa a 'for i in xrange (len (x))'

for i in xrange(len(something)): 
    workwith = something[i] 
    # do things with workwith... 

Cosa devo fare per evitare questo "antipattern"?

risposta

22

Vedi Pythonic

for workwith in something: 
    # do things with workwith 
+1

+1: 80% del tempo, questo è ciò che si significava. –

+0

bene, a meno che non si desideri modificare il valore. considerare per il workwith in qualcosa: workwith + = 1 – vartec

+0

@vartec: questo è vero, ma data la domanda di Alam non lo fa. – kmkaplan

0

ad esempio:

[workwith(i) for i in something] 
+0

'qualcosa' è una raccolta di oggetti. Dall'originale, non sembra che "qualcosa" sia necessariamente un numero intero né che "workwith" sia una collezione. 'workwith' sembra essere una variabile temporanea per il workign con 'qualcosa'. – hughdbrown

-3

Che cosa è x? Se è una sequenza o un iteratore o una stringa, quindi

for i in x: 
    workwith = i 

funzionerà correttamente.

+0

La risposta di SilentGhost è migliore :-) – Xolve

+0

Non riesco a pensare a nessuna situazione in cui questa sia la migliore risposta. Sembra essere una versione inferiore della risposta di kmkaplan. (Capisco che è stato pubblicato prima di kmkaplan, ma è * possibile * cancellare la propria risposta, una volta che è stata proposta una versione chiaramente più ambigua.) Tuttavia, non ho inserito -1, poiché è stato abbattuto abbastanza da altri. – ToolmakerSteve

23

Se avete bisogno di conoscere l'indice nel corpo del ciclo:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 
+1

+1: il 20% delle volte, questo è ciò che intendevi. –

12

Come ci sono twoanswers alla domanda che sono perfettamente validi (con un presupposto ciascuno) e autore della questione ha non li informate sul destino dell'indice, la risposta valida dovrebbe leggere:

Se do not need index affatto:

for workwith in something: 
    print "element", workwith 
.210

Se need index:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 

Se la mia risposta non è adeguata, si prega di commentare, e io cancellare it :)

+1

+1: No, la tua risposta è più appropriata, e la più completa, in realtà. – tzot