Python – Capítulo 13: Recorriendo una lista con la sentencia FOR

Objetivo: presentar el bucle FOR al estilo de Python.

Supongamos que tenemos una lista sobre la que tenemos que realizar algún tipo de acción que implique acceder secuencialmente a cada uno de sus elementos. Sin ir más lejos, ¿cómo haríamos para imprimir, uno por uno, cada elemento que compone la lista?

Este problema es muy común y debe poder resolverse de un modo sencillo.

Considera, por ejemplo, la siguiente lista de todos los días de la semana:


semana = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo']

Imprimir el listado sería tan sencillo como hacer


print (semana[0])
print (semana[1])
print (semana[2])
print (semana[3])
print (semana[4])
print (semana[5])
print (semana[6])

Recuerda, tal como explicamos en el capítulo 11, que el primer índice de una lista es el 0, y no el 1; por eso hemos recorrido los siete elementos empezando en el cero y acabando en el seis.

Eso resolvería nuestro problema. Pero, ¿y si la lista tuviera 1000 elementos? ¿Escribiríamos 1000 líneas de código para acceder a la secuencia completa de la lista?

El bucle for nos permite solucionar esto de un modo elegante. Obsérvalo en acción:

semana = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes',
 'Sábado', 'Domingo']

for dia in semana:
    print(dia)

---
Lunes
Martes
Miércoles
Jueves
Viernes
Sábado
Domingo

La variable dia, definida ad hoc en el propio bucle, va a tomar, uno a uno, todos los elementos de la lista semana, comenzando por ‘Lunes’ y terminando en ‘Domingo’.

Con cada uno de estos valores realizará las acciones definidas a continuación en el cuerpo del bloque (delimitado por la indentación). En el ejemplo, simplemente imprimirá su valor.

¡Cuánta elegancia! Adoro Python.

Javier Montero Gabarró


Fecha de la última revisión: 11 de noviembre de 2012


Python – Capítulo 13: Recorriendo una lista con la sentencia FOR


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

19 opiniones en “Python – Capítulo 13: Recorriendo una lista con la sentencia FOR”

  1. Y si dentro de una lista hubiese otra, y dentro de esta otra pero yo no sé que las hay, como puedo hacer para mostrar iterar listas dentro de otras?

    1. Echa un vistazo a uno de los primeros capítulos, el cinco, dedicado a la sentencia if. Ahí se habla de la indentación. Si después de la lectura te surgen dudas házmelo saber. 🙂

  2. no solo si dentro de la lista existe otra, vamos mas allá por ejemplo si la lista tuviera indices y propiedades del tipo: lista = [ s.text for s in cosa]
    supongo que el tamaño total lo sacaríamos con len(lista) pero lista dentro tiene “propiedades” entonces yo hago print lista[0].algo

    dicho lo anterior… si yo quisiera iterar los indices desde el 0 hasta lo que devuelva len… como podría hacerlo?

  3. Necesito unir un elemento1 de una lista con el elemento2 de otra lista, donde cada elemento corresponda a un elemento único de la otra lista.

    Le agradezco si me puede colaborar.

    1. Necesitas hacer uso de la función range() para realizar la iteración.

      Un modo de resolverlo:

      
      lista1 = ['a', 'b', 'c']
      lista2 = [1, 2, 3]
      lista3 = []
      
      for indice in range(len(lista1)):
          lista3.append(lista1[indice] + str(lista2[indice]))

      Lo que generaría la siguiente salida de lista3:

      >>> lista3
      ['a1', 'b2', 'c3']

      Observa el uso de la función str para convertir la segunda lista a string y poder realizar la concatenación. Para curarte en salud, si lo que quieres es crear una función que se adapte a cualquier caso general, usa str en ambas listas.

      Saludos

  4. Cordial saludo, las listas pueden almacenar objetos del mismo tipo y con el mismo valor sin ningún problema a diferencia de los diccionarios que cada nueva clave que ya esté va reemplazando la otra, ejemplo de una lista: lista = [1,2,3,1], esta lista tiene 4 valores mas no 3 cierto? , el problema donde me hallo es que estoy recorriendo una lista que contiene dos valores iguales , de esa lista quiero sumar los valores de los indices pares , pero cuando recorre la lista y se topa con un indice que tiene valor digamos de 2 pero este indice es impar pues no lo suma pero en el recorrido de la lista mas adelante se encuentra con un indice par y este contiene el mismo valor de 2 no parece reconocermelo y no hallo el porqué, no sé si python supone que como ya recorrió ese valor y su indice era impar “supone” (que no debería) que el proximo item recorrido al tener el mismo valor no lo toma en cuenta aunque este sea de un indice par. tienes alguna explicación que aclare mis dudas?.
    pd: el codigo es el siguiente:(contando el indice 0 como par obviamente)(si se pasa una lista vacía retornara 0)

    def sumar_indices_pares(array):
    suma = []
    while array == []:
    return 0
    for i in array:
    if array.index(i) % 2 == 0 :
    suma.append(i)
    return sum(suma)

    y pasandole cualquier lista el programa funciona normal, ejemplo:
    sumar_indices_pares([1,2,3,4,5]) # devuelve 9 y es correcto

    PERO, si le paso la siguiente lista:
    sumar_indices_pares([1,2,3,4,2]) # devuelve 4 en vez de 6 pues no me está reconociendo el segundo 2, osea, el 2 del indice [4] siendo este indice par.

    Saludos.

    1. Lo siento porque no quedó indentado el codigo: *=indentación 🙂
      def sumar_indices_pares(array):
      *****suma = []
      **** while array == []:
      **********return 0
      ****for i in array:
      ********if array.index(i) % 2 == 0 :
      **********suma.append(i)
      ****return sum(suma)

    2. Qué tal. Dos puntos importantes:

      En primer lugar, la técnica utilizada para recorrer los índices pares. Tu problema se resuelve simplemente así:

      def sumar_indices_pares(lista):
          suma = 0
          for i in range(0, len(lista), 2):
              suma = suma + lista[i]
          return suma

      Con la función range consigo un iterador que va desde 0 hasta su longitud menos uno, tomados de dos en dos. Es como si empleara un for de toda la vida en lenguaje C.
      Poco a poco, conforme vayas aprendiendo, procura hacerte con una colección de técnicas y usos. A lo largo de tu vida como programador surgirán siempre, una y otra vez, problemas que ya habrás abordado en otras ocasiones. Te ahorrará muchísimo tiempo de trabajo disponer de tu propia colección.
      Tu solución no funcionaba por un uso incorrecto del método index.
      El método index, aplicado a una lista, devuelve el índice de la primera ocurrencia de ese valor. En tu ejemplo, con [1, 2, 3, 4, 2], por muchos doses más que pongas en tu lista, index[2] siempre será 1, de modo que nunca serán sumados.
      Saludos

      1. Saludos.En un principio había usado range pero caí en el error de que en vez de colocar len(array) coloqué array[-1] que no es lo mismo y no lo seguí intentando por lo que me desvié por el metodo index(), pero no recordaba que devolvía la primera ocurrencia, por lo que al final terminé con esta solución:

        ****def sumar_indices_pares(array):
        ********if array == []:
        ************return 0
        ********return sum(array[::2])

        Gracias, saludos.

        1. Sí señor. Ese es un modo elegante y pythonista de resolverlo. Tal vez, si has definido correctamente tu función sum, puedas afinarlo aún más evitando el if de comprobación.
          Saludos

  5. Gracias me quedaron muchas cosas claras, pero tengo un problema, tengo que hacer un programa donde imprima una lista si y solo si un elemento de esa lista es el que me piden, por ejemplo este es el problema que tengo que solucionar: – Consultar casos abiertos o cerrados: imprime la lista de los casos, abiertos o cerrados, debe solicitar antes cuál status imprimir. osea si me dicen que imprima solo los casos abiertos si asi me lo indican o los casos cerrados, se sabe si estan abiertos o cerrados porque dentro de la lista aparece si estan abiertos o cerrados

Deja un comentario