For Loops en Python

Para declaraciones de bucle

Python utiliza un bucle for para iterar sobre una lista de elementos. A diferencia de C o Java, que usan el bucle for para cambiar un valor en pasos y acceder a algo como una matriz usando ese valor.

Los bucles for iteran sobre estructuras de datos basadas en colecciones como listas, tuplas y diccionarios.

La sintaxis básica es:

for value in list_of_values: # use value inside this block

En general, puede usar cualquier cosa como valor del iterador, donde se pueden asignar las entradas del iterable. Por ejemplo, puede descomprimir tuplas de una lista de tuplas:

list_of_tuples = [(1,2), (3,4)] for a, b in list_of_tuples: print("a:", a, "b:", b)

Por otro lado, puede recorrer cualquier cosa que sea iterable. Puede llamar a una función o utilizar una lista literal.

for person in load_persons(): print("The name is:", person.name)
for character in ["P", "y", "t", "h", "o", "n"]: print("Give me a '{}'!".format(character))

Algunas formas en las que se utilizan los bucles For:

Iterar sobre la función range ()

for i in range(10): print(i)

En lugar de ser una función, el rango es en realidad un tipo de secuencia inmutable. La salida contendrá resultados desde el límite inferior, es decir, 0 hasta el límite superior, es decir, 10, pero excluyendo 10. Por defecto, el límite inferior o el índice inicial se establece en cero. Salida:

> 0 1 2 3 4 5 6 7 8 9 >

Además, se puede especificar el límite inferior de la secuencia e incluso el paso de la secuencia agregando un segundo y un tercer parámetro.

for i in range(4,10,2): #From 4 to 9 using a step of two print(i)

Salida:

> 4 6 8 >

función xrange ()

En su mayor parte, xrange y range son exactamente iguales en términos de funcionalidad. Ambos proporcionan una manera de generar una lista de números enteros para que los use, como quiera. La única diferencia es que range devuelve un objeto de lista de Python y xrange devuelve un objeto xrange. Significa que xrange en realidad no genera una lista estática en tiempo de ejecución como lo hace range. Crea los valores a medida que los necesita con una técnica especial llamada ceder. Esta técnica se utiliza con un tipo de objeto conocido como generadores.

Una cosa mas que agregar. En Python 3.x, la función xrange ya no existe. La función de rango ahora hace lo que hace xrange en Python 2.x

Iterar valores en una lista o tupla

A = ["hello", 1, 65, "thank you", [2, 3]] for value in A: print(value)

Salida:

> hello 1 65 thank you [2, 3] >

Iterar claves en un diccionario (también conocido como hashmap)

fruits_to_colors = {"apple": "#ff0000", "lemon": "#ffff00", "orange": "#ffa500"} for key in fruits_to_colors: print(key, fruits_to_colors[key])

Salida:

> apple #ff0000 lemon #ffff00 orange #ffa500 >

Itera sobre dos listas del mismo tamaño en un solo bucle con la función zip ()

A = ["a", "b", "c"] B = ["a", "d", "e"] for a, b in zip(A, B): print a, b, a == b 

Salida:

> a a True b d False c e False >

Itere sobre una lista y obtenga el índice correspondiente con la función enumerate ()

A = ["this", "is", "something", "fun"] for index,word in enumerate(A): print(index, word)

Salida:

> 0 this 1 is 2 something 3 fun >

Un caso de uso común es iterar sobre un diccionario:

for name, phonenumber in contacts.items(): print(name, "is reachable under", phonenumber)

Si es absolutamente necesario acceder al índice actual de su iteración, ¡ NO lo use range(len(iterable))! Esta es una práctica extremadamente mala y le provocará muchas risas por parte de los desarrolladores senior de Python. Use la función incorporada en su enumerate()lugar:

for index, item in enumerate(shopping_basket): print("Item", index, "is a", item)

declaraciones para / else

Pyhton le permite usar else con bucles for, el caso else se ejecuta cuando no se cumple ninguna de las condiciones en el cuerpo del bucle. Para usar el else tenemos que hacer uso de la breakinstrucción para que podamos salir del ciclo en una condición satisfactoria. Si no salimos, se ejecutará la parte else.

week_days = ['Monday','Tuesday','Wednesday','Thursday','Friday'] today = 'Saturday' for day in week_days: if day == today: print('today is a week day') break else: print('today is not a week day')

En el caso anterior, la salida será today is not a week dayya que nunca se ejecutará la ruptura dentro del bucle.

Iterar sobre una lista usando la función de bucle en línea

También podríamos iterar en línea usando Python, por ejemplo, si necesitamos poner en mayúsculas todas las palabras en una lista de una lista, simplemente podríamos hacer lo siguiente:

A = ["this", "is", "awesome", "shinning", "star"] UPPERCASE = [word.upper() for word in A] print (UPPERCASE)

Salida:

> ['THIS', 'IS', 'AWESOME', 'SHINNING', 'STAR'] >

Más información:

  • Python2 para documentación de bucle
  • Python3 para documentación de bucle