2010-11-13 30 views
38

In C/C++, posso avere il seguente ciclo for(int k = 1; k <= c ; k +=2)ciclo for in Python

Come non fare la stessa cosa in Python?

Posso farlo for k in range(1,c): in Python, che sarebbe identico a for(int k = 1; k <= c ; k++) in C/C++.

risposta

31

si dovrebbe anche sapere che in Python, iterazione su indici interi è cattivo stile, e anche più lento rispetto all'alternativa. Se vuoi solo guardare ciascuno degli elementi in un elenco o dettare, passa direttamente attraverso l'elenco o dettami.

mylist = [1,2,3] 
for item in mylist: 
    print item 

mydict = {1:'one', 2:'two', 3:'three'} 
for key in mydict: 
    print key, mydict[key] 

Questo in realtà è più veloce rispetto all'utilizzo del codice di cui sopra con la gamma(), e rimuove il i variabile estranea.

Se è necessario modificare gli elementi di un elenco sul posto, allora si fai bisogno l'indice, ma c'è ancora un modo migliore:

for i, item in enumerate(mylist): 
    mylist[i] = item**2 

Ancora una volta, questo è sia più veloce e considerato più leggibile . Questo è uno dei principali cambiamenti nel pensare che devi fare quando passi da C++ a Python.

60

Provare ad usare questa:

for k in range(1,c+1,2): 
+7

come nota a margine, se si sta utilizzando Python 2.x xrange è più efficiente. – GWW

+4

@GWW: xrange è tecnicamente più _memory_efficiente, ma raramente ha conseguenze pratiche a meno che il tuo intervallo non sia molto grande e 3.x elimina completamente il nome 'xrange', quindi usarlo è più probabile che confonda i principianti di qualsiasi altra cosa altro. –

+0

@Nicholas: Sto solo citando, non sto davvero cercando di confondere. Ho imparato a conoscere xrange nel modo più duro quando ho avuto a che fare con un enorme collo di bottiglia nel mio codice. Non voglio che nessun altro si blocchi su questo: P – GWW

9

Se si vuole scrivere un ciclo in Python che stampa qualche intero senza ecc, poi basta copiare e patè questo codice, funzionerà un sacco

 #Display Value from 1 TO 3 
    for i in range(1,4): 
    print "",i,"value of loop" 

     # Loop for dictionary data type 
    mydata = {"Fahim":"Pakistan", "Vedon":"China", "Bill":"USA" } 
    for user, country in mydata.iteritems(): 
    print user, "belongs to " ,country 
15

La risposta è buona, ma per le persone che vogliono questo con range(), la forma da fare è:

range(end):

>>> list(range(10)) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

range(start,end):

>>> list(range(1, 11)) 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

range(start,end, step):

>>> list(range(0, 30, 5)) 
[0, 5, 10, 15, 20, 25] 
4

In Python si ha in generale per nei cicli invece di generale per i loop come C/C++, ma è possibile ottenere la stessa cosa con il seguente codice.

for k in range(1, c+1, 2): 
    do something with k 

Riferimento Loop in Python.