2010-11-13 23 views
38

En C/C++, que puede tener el siguiente bucle for(int k = 1; k <= c ; k +=2)bucle for en Python

Cómo no hacer lo mismo en Python?

Puedo hacer esto for k in range(1,c): en Python, que sería idéntico a for(int k = 1; k <= c ; k++) en C/C++.

Respuesta

31

También debe saber que en Python, interactuando sobre índices enteros es mal estilo, y también más lenta que la alternativa. Si solo desea ver cada uno de los elementos en una lista o dict, bucle directamente a través de la lista o dict.

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] 

Esto es realmente más rápido que utilizando el código anterior con la gama(), y elimina la i variable extraña.

Si necesita editar los elementos de una lista en contexto, entonces hace necesitan el índice, pero todavía hay una manera mejor:

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

De nuevo, esto es a la vez más rápido y se considera más fácil de leer . Este es uno de los principales cambios en el pensamiento que debe realizar al pasar de C++ a Python.

60

Trate de usar esto:

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

como nota al margen si está utilizando Python 2.x xrange es más eficiente. – GWW

+4

@GWW: xrange es técnicamente más eficiente, pero raramente tiene consecuencias prácticas a menos que su alcance sea extremadamente grande, y 3.x elimina por completo el nombre 'xrange', por lo que su uso es más probable que confunda a los novatos que a nada más. –

+0

@Nicholas: Solo lo estoy mencionando, realmente no estoy tratando de confundir. Aprendí sobre xrange de la manera más difícil cuando tenía rango, causando un enorme cuello de botella en mi código. No quiero que nadie más se quede atrapado en eso: P – GWW

9

Si desea escribir un bucle en Python que imprime un entero sin etc, entonces sólo debes copiar y paté de este código, que funcionará mucho

 #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 respuesta es buena, pero para las personas que quieren esto con range(), la forma de hacerlo es:

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

En Python por lo general tienen en el lugar de los bucles en general de bucles como C/C++, pero se puede lograr lo mismo con el siguiente código.

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

Referencia Loop in Python.