Python: comprobar el 铆ndice de un elemento en una lista

    Introducci贸n

    Las listas son 煤tiles de diferentes formas en comparaci贸n con otros tipos de datos debido a su versatilidad. En este art铆culo, veremos una de las operaciones m谩s comunes con listas: encontrar el 铆ndice de un elemento.

    Veremos diferentes escenarios para encontrar un elemento, es decir, encontrar la primera, la 煤ltima y todas las apariciones de un elemento. Adem谩s de lo que ocurre cuando el elemento que buscamos no existe.

    Uso de la funci贸n index ()

    Todas las operaciones que mencionamos en el 煤ltimo p谩rrafo se pueden realizar con el index() funci贸n. La sintaxis de esta funci贸n es index(element[, start[, end]]).

    los element El par谩metro representa naturalmente el elemento que estamos buscando. los start y end Los par谩metros son opcionales y representan el rango de 铆ndices en los que buscamos element.

    El valor predeterminado para start es 0 (buscando desde el principio), y el valor predeterminado para end es el n煤mero de elementos de la lista (buscando hasta el final de la lista).

    La funci贸n devuelve la primera posici贸n de la element en la lista que podr铆a encontrar, independientemente de cu谩ntos elementos iguales haya despu茅s de la primera aparici贸n.

    Encontrar la primera aparici贸n de un elemento

    Utilizando el index() funci贸n sin establecer ning煤n valor para start y end nos dar谩 la primera aparici贸n del element estamos buscando:

    my_list = ['a', 'b', 'c', 'd', 'e', '1', '2', '3', 'b']
    
    first_occurrence = my_list.index('b')
    print("First occurrence of 'b' in the list: ", first_occurrence)
    

    Lo que nos dar铆a el resultado esperado:

    First occurrence of 'b' in the list: 1
    

    Encontrar todas las apariciones de un elemento

    Para encontrar todas las apariciones de un elemento, podemos usar el par谩metro opcional start de modo que busquemos solo en ciertos segmentos de la lista.

    Por ejemplo, digamos que la primera aparici贸n de un elemento en el 铆ndice 3. Para encontrar el siguiente, tendr铆amos que continuar nuestra b煤squeda de la primera aparici贸n de ese elemento despu茅s del 铆ndice. 3. Repetir铆amos este proceso, cambiando donde comienza nuestra b煤squeda, siempre que encontremos nuevas ocurrencias del elemento:

    my_list = ['b', 'a', 2, 'n', False, 'a', 'n', 'a']
    
    all_occurrences = []
    last_found_index = -1
    element_found = True
    
    while element_found:
        try:
            last_found_index = my_list.index('a', last_found_index + 1)
            all_occurrences.append(last_found_index)
        except ValueError:
            element_found = False
        
    if len(all_occurrences) == 0:
        print("The element wasn't found in the list")
    else:
        print("The element was found at: " + str(all_occurrences))
    

    Ejecutar este c贸digo nos dar铆a:

    The element was found at: [1, 5, 7]
    

    Tuvimos que usar un try bloque aqu铆, ya que el index() la funci贸n arroja un error cuando no puede encontrar el especificado element en el rango dado. Esto puede ser inusual para los desarrolladores que est谩n m谩s acostumbrados a otros lenguajes, ya que funciones como estas generalmente regresan -1/null cuando no se puede encontrar el elemento.

    Sin embargo, en Python tenemos que tener cuidado y usar un try bloquear cuando usamos esta funci贸n.

    Otra forma m谩s ordenada de hacer lo mismo ser铆a utilizando la comprensi贸n de listas e ignorando las index() funci贸n en conjunto:

    my_list = ['b', 'a', 2, 'n', False, 'a', 'n', 'a']
    
    all_occurrences = [index for index, element in enumerate(my_list) if element == 'a']
    
    print("The element was found at: " + str(all_occurrences))
    

    Lo que nos dar铆a el mismo resultado que antes. Este enfoque tiene la ventaja adicional de no utilizar el try bloquear.

    Encontrar la 煤ltima aparici贸n de un elemento

    Si necesita encontrar la 煤ltima aparici贸n de un elemento en la lista, hay dos enfoques que puede usar con el index() funci贸n:

    • Invierta la lista y busque la primera aparici贸n en la lista invertida
    • Revise todas las apariciones del elemento y solo realice un seguimiento de la 煤ltima aparici贸n

    Con respecto al primer enfoque, si supi茅ramos la primera ocurrencia del element en una lista invertida, podr铆amos encontrar la posici贸n de la 煤ltima aparici贸n en la original. M谩s espec铆ficamente, podemos hacer esto restando reversed_list_index - 1 de la longitud de la lista original:

    my_list = ['b', 'a', 2, 'n', False, 'a', 'n', 'a']
    
    reversed_list_index = my_list[::-1].index('n')
    # or alteratively:
    # reversed_list_index2 = list(reversed(my_list)).index('n')
    
    original_list_index = len(my_list) - 1 - reversed_list_index
    
    print(original_list_index)
    

    Lo que nos dar铆a el resultado deseado:

    6
    

    En cuanto al segundo enfoque, podr铆amos modificar el c贸digo que usamos para encontrar todas las ocurrencias y solo realizar un seguimiento de la 煤ltima ocurrencia que encontramos:

    my_list = ['b', 'a', 2, 'n', False, 'a', 'n', 'a']
    
    last_occurrence = -1
    element_found = True
    
    while element_found:
        try:
            last_occurrence = my_list.index('n', last_occurrence + 1)
        except ValueError:
            element_found = False
        
    if last_occurrence == -1:
        print("The element wasn't found in the list")
    else:
        print("The last occurrence of the element is at: ", last_occurrence)
    

    Lo que nos dar铆a el mismo resultado:

    6
    

    Conclusi贸n

    Hemos echado un vistazo a algunos de los usos m谩s comunes de la index() funci贸n y c贸mo evitarlo en algunos casos.

    Mantener el comportamiento potencialmente inusual del index() funci贸n en mente, donde arroja un error en lugar de devolver -1/None cuando un elemento no se encuentra en la lista.

    .

    Etiquetas:

    Deja una respuesta

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