C贸mo acceder al 铆ndice en el bucle for de Python

    Introducci贸n

    Python es un lenguaje de programaci贸n de muy alto nivel y tiende a alejarse de cualquier cosa que se parezca remotamente a la estructura de datos internos. Debido a esto, generalmente no necesitamos los 铆ndices de una lista para acceder a sus elementos, sin embargo, a veces los necesitamos desesperadamente.

    En este art铆culo, repasaremos diferentes enfoques sobre c贸mo acceder a un 铆ndice en el bucle for de Python.

    驴C贸mo acceder al 铆ndice en el bucle for de Python?

    El m茅todo m谩s f谩cil y popular para acceder al 铆ndice de elementos en un bucle for es recorrer la longitud de la lista, aumentando la index. En cada aumento, accedemos a la lista de ese index:

    my_list = [3, 5, 4, 2, 2, 5, 5]
    
    print("Indices and values in my_list:")
    
    for index in range(len(my_list)):
        print(index, my_list[index], end = "n")
    

    Aqu铆, no iteramos a trav茅s de la lista, como lo har铆amos normalmente. Iteramos desde 0..len(my_list) con el index. Entonces, usamos esto index variable para acceder a los elementos de la lista en orden de 0..n, d贸nde n es el final de la lista.

    Este c贸digo producir谩 la salida:

    Indices and values in my_list:
    0 3
    1 5
    2 4
    3 2
    4 2
    5 5
    6 5
    

    Usando enumerate ()

    enumerate() es una funci贸n incorporada de Python que es muy 煤til cuando queremos acceder tanto a los valores como a los 铆ndices de una lista. Vale la pena se帽alar que este es el m茅todo m谩s r谩pido y eficiente para adquirir el 铆ndice en un bucle for.

    Este m茅todo agrega un contador a un iterable y los devuelve juntos como un objeto enumerado. Este objeto enumerado se puede convertir f谩cilmente en una lista utilizando un list() constructor. Esta es la forma m谩s com煤n de acceder a ambos elementos y sus 铆ndices al mismo tiempo.

    Ahora, echemos un vistazo al c贸digo que ilustra c贸mo se usa este m茅todo:

    my_list = [3, 5, 4, 2, 2, 5, 5]
    print("Indices and values in my_list:") 
    for index, value in enumerate(my_list): 
        print(list((index, value))) 
    

    Este c贸digo producir谩 la salida:

    Indices and values in my_list:
    [0, 3]
    [1, 5]
    [2, 4]
    [3, 2]
    [4, 2]
    [5, 5]
    [6, 5]
    

    Lo que hicimos en este ejemplo fue enumerar cada valor en una lista con su 铆ndice correspondiente, creando un objeto enumerado. Luego, convertimos ese objeto enumerado en una lista usando el list() constructor e imprimi贸 cada lista en la salida est谩ndar.

    Adem谩s, puede configurar el start argumento para cambiar la indexaci贸n. Actualmente, est谩 basado en 0. Vamos a cambiarlo para empezar 1 en lugar:

    my_list = [3, 5, 4, 2, 2, 5, 5]
    print("Indices and values in my_list:") 
    for index, value in enumerate(my_list, start=1): 
        print(list((index, value))) 
    

    Ahora, esto produce:

    Indices and values in my_list:
    [1, 3]
    [2, 5]
    [3, 4]
    [4, 2]
    [5, 2]
    [6, 5]
    [7, 5]
    

    Uso de comprensiones de listas

    La comprensi贸n de una lista es una forma de definir y crear listas basadas en listas ya existentes. Suele ser una forma m谩s r谩pida, elegante y compacta de manipular listas, en comparaci贸n con funciones y for bucles.

    Cada lista de comprensi贸n en Python contiene estos tres elementos:

    • iterable – Una colecci贸n cuyos elementos podemos inspeccionar uno a la vez
    • miembro – Valor u objeto en una lista (que es iterable)
    • expresi贸n – Puede ser cualquier expresi贸n v谩lida que devuelva un valor (un miembro, un iterable, una llamada a una funci贸n …)

    Echemos un vistazo al siguiente ejemplo:

    my_list = [1, 2, 3, 4, 5]
    my_list_squared = [m*m for m in my_list]
    print(my_list_squared)
    

    Este c贸digo producir谩 la salida:

    [1, 4, 9, 16, 25]
    

    En esta lista de comprensi贸n, my_list representa lo iterable, m representa a un miembro y m*m representa la expresi贸n.

    Ahora que analizamos qu茅 es la comprensi贸n de listas, podemos usarla para recorrer una lista y acceder a sus 铆ndices y valores correspondientes. Echemos un vistazo a este ejemplo:

    my_list = [3, 5, 4, 2, 2, 5, 5]
    print("Indices and values in my_list:") 
    print([list((i, my_list[i])) for i in range(len(my_list))])
    

    Este c贸digo producir谩 la salida:

    Indices and values in my_list:
    [[0, 3], [1, 5], [2, 4], [3, 2], [4, 2], [5, 5], [6, 5]]
    

    Lo que hicimos en este ejemplo fue usar el list() constructor. Este constructor no acepta argumentos ni tiene un solo argumento: un iterable. Esto incluye cualquier objeto que pueda ser una secuencia (cadena, tuplas) o una colecci贸n (conjunto, diccionario).

    Si no se pasa ning煤n par谩metro, devuelve una lista vac铆a, y si se pasa un iterable como par谩metro, crea una lista que consta de sus elementos.

    Construimos una lista de dos listas de elementos que tienen el formato [elementIndex, elementValue] . Estas listas de dos elementos se construyeron pasando pares al list() constructor, que luego escupi贸 una lista equivalente.

    Esto crear谩 7 listas separadas que contienen el 铆ndice y su valor correspondiente en my_list que se imprimir谩.

    Usando zip ()

    los zip() La funci贸n acepta dos o m谩s par谩metros, que deben ser iterables.

    Devuelve un objeto zip, un iterador de tuplas en el que el primer elemento de cada iterador pasado se empareja, el segundo elemento de cada iterador pasado se empareja y de manera an谩loga para el resto de ellos:

    list_a = [1, 2, 3]
    list_b = ['A', 'B', 'C']
    
    # Zip will make touples from elements with the same 
    # index (position in the list). Meaning that 1 from the
    # first list will be paired with 'A', 2 will be paired
    # with 'B' and so on...
    for elem1,elem2 in zip(list_a,list_b):
        print((elem1,elem2))
    

    Al ejecutar el fragmento de c贸digo anterior obtenemos:

    (1, 'A')
    (2, 'B')
    (3, 'C')
    

    La longitud del iterador que devuelve esta funci贸n es igual a la longitud del m谩s peque帽o de sus par谩metros.

    Ahora que hemos explicado c贸mo funciona esta funci贸n, us茅mosla para resolver nuestra tarea:

    my_list = [3, 5, 4, 2, 2, 5, 5]
    print ("Indices and values in my_list:") 
    for index, value in zip(range(len(my_list)), my_list):
        print((index, value))
    

    Este c贸digo producir谩 la salida:

    Indices and values in my_list:
    (0, 3)
    (1, 5)
    (2, 4)
    (3, 2)
    (4, 2)
    (5, 5)
    (6, 5)
    

    En este ejemplo, pasamos una secuencia de n煤meros en el rango de 0 a len(my_list) como primer par谩metro de la zip() funci贸n, y my_list como segundo par谩metro. La funci贸n emparej贸 cada 铆ndice con su valor correspondiente, y los imprimimos como tuplas usando un for lazo.

    Si quisi茅ramos convertir estas tuplas en una lista, usar铆amos la list() constructor, y nuestro print La funci贸n se ver铆a as铆:

    print(list((index, value)))
    

    Conclusi贸n

    En este art铆culo pasamos por cuatro m茅todos diferentes que nos ayudan a acceder a un 铆ndice y su valor correspondiente en una lista de Python.

    Adem谩s del m茅todo m谩s b谩sico, analizamos los conceptos b谩sicos de las listas por comprensi贸n y c贸mo se pueden utilizar para resolver esta tarea. Aunque es una forma m谩s r谩pida de hacerlo en comparaci贸n con un bucle for gen茅rico, generalmente deber铆amos evitar usarlo si la comprensi贸n de la lista en s铆 se vuelve demasiado complicada. Las comprensiones de listas complicadas pueden generar mucho c贸digo desordenado.

    Es importante tener en cuenta que aunque cada comprensi贸n de lista se puede reescribir en un bucle for, no todos los bucles for se pueden reescribir en una comprensi贸n de lista.

    Otros dos m茅todos que usamos se basaron en las funciones integradas de Python: enumerate() y zip(), que uni贸 los 铆ndices y sus valores correspondientes en tuplas. Luego, convertimos esas tuplas en listas y las imprimimos en la salida est谩ndar.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *