Sentencias bucles for

Python utiliza bucles for para iterar sobre una lista de elementos. A
diferencia de C o Java,  que utilizan el bucle for para cambiar un valor (una variable) en cada iteración y así poder acceder a los elementos de un arreglo (array) utilizando ese valor.

En Python los bucles for iteran sobre estructuras de datos basadas en colecciones como listas, tuplas y/o diccionarios.

La sintaxis básica es:

for valor in lista_de_valores:
  # puedes usar la variable valor dentro de este bloque de codigo

#for, in -->> son palabras reservadas del bucle for
#se puede leer de la siguiente forma:
#por cada <valor> en la <lista_de_valores>

En general, puedes utilizar cualquier cosa como valor del iterador, donde serán asignados los valores del objeto a iterar, Por ejemplo, puedes extraer una tupla de una lista de tuplas:

lista_tuplas = [(1,2), (3,4)]

for a, b in lista_tuplas:
  print("a:", a, "b:", b)
  
"""
a,b -> valor iterador
lista_tuplas -> objeto a iterar
Salida
a: 1 b: 2
a: 3 b: 4
"""

Por otra parte, puedes recorrer cualquier objeto que sea iterable, puedes llamar a una función o iterar sobre una lista literal

for persona in cargar_personas():
  print("El nombre es:", persona.nombre)
for caracter in ["P", "y", "t", "h", "o", "n"]:
  print("Dame una '{}'!".format(caracter))

Diferentes formas de usar bucles For:

Iterar sobre la función range() - rango

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

En lugar de ser una función, range() en realidad es un tipo de secuencia inmutable. La secuencia resultante tendrá una lista desde el límite inferior, p. ej. cero, hasta el límite superior menos uno.
Por defecto el límite inferior o índice inicial será cero.

Resultado:

range(10)
>
0
1
2
3
4
5
6
7
8
9
>

range(5)
>
0
1
2
3
4
>

Adicionalmente, es posible especificar el límite inferior de la secuencia e incluso los pasos de la numeración añadiendo un segundo y tercer parámetro.

for i in range(4,10,2): #Secuencia del 4 al 9 , de 2 en 2
    print(i)

Resultado:

>
4
6
8
>


Función xrange()

range() y xrange() son bastante similares en términos de fucionalidad. Ambas proporcionan una manera de generar una lista de números enteros, sin embargo, la única deferencia es; range() retorna un objeto de tipo lista y xrange() retorna un objeto xrange, esto quiere decir, xrange() no genera una lista estática en el momento de la ejecución, xrange() va creando cada valor en cada iteracion con una técnica especial llamada "yielding" (rendimiento). Esta técnica es usada con un tipo de objeto conocido como "generators" (generadores).

Por último. En Python 3.x, la función xrange() dejo de existir. La función range() hace lo que xrange() hacia en Python 2,x.

Iterar sobre los valores de una lista o tupla

A = ["hola", 1, 65, "gracias", [2, 3]]
for value in A:
    print(value)

Resultado:

>
hola
1
65
gracias
[2, 3]
>


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

fruta_a_color = {"manzana": "#ff0000",
                 "lima": "#ffff00",
                 "naranja": "#ffa500"}

for key in fruta_a_color:
    print(key, fruta_a_color[key])

Resultado:

>
manzana #ff0000
lima #ffff00
naranja #ffa500
>

Iterar 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
  

Resultado:

>
a a True
b d False
c e False
>
# True = Verdadero
# False = False

Iterarar sobre una lista y obtener el índice correspondiente con la función enumerate() - enumerar

A = ["esto", "es", "algo", "divertido"]

for indice,palabra in enumerate(A):
    print(indice, palabra)

Resultado:

>
0 esto
1 es
2 algo
3 divertido
>

Una práctica común es iterar sobre un diccionario:

for nombre, numero in conactos.items():
  print(nombre, "tiene el telefono: ", numero)

Si nececitas acceder al índice actual en una iteración , NUNCA utilicesrange(len(iterable)) Esto es una mala práctica que solo provocará las burlas de aquellos con mas experiencia en Python. Es mejor utilizar la función integrada enumerate():

for indice, articulo in enumerate(lista_compras):
  print("Articulo", indice, "es un", articulo)
 
 # Salida:
 # Articulo 2 es un jamon

Sentencias bucle for/else

En Python es posible el uso de else en bucles for, elsees ejecutado si ninguna condición dentro del bucle for se cumplió. Para poder hacer uso de elsetendremos que utilizar una sentencia break(terminar, interrumpir) y asi interrumpir el bucle for si una condición se cumple. Si el bucle for no es interrumpido la sentencia else se ejecutara

dias_semana = ['Lunes','Martes','Miercole','Jueves','Viernes']
hoy = 'Sabado'
for dia in dias_semana:
  if dia == hoy:
    print('Hoy es un dia laborable')
    break
else:
  print('Hoy no es un dia laborable')

En el ejemplo anterior el resultado será Hoy no es un dia laborable ya que la instrucción breaknunca se ejecutó.

Itera sobre una lista utilizando la función especial de bucle en línea.

También es posible escribir un bucle for en una sola línea de código, por ejemplo, si queremos convertir a mayúsculas todas las palabras de una lista podemos hacerlo de la siguiente forma:

A = ["esto", "es", "asombroso", "estralla", "brillante"]

MAYUSCULAS = [palabra.upper() for palabra in A]
print (MAYUSCULAS)

Resultado:

>
['ESTO', 'ES', 'ASOMBROSO', 'ESTRELA', 'BRILLANTE']
>

Para más información:

Traducido del artículo - For Loops in Python