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 *