Cómo encontrar el índice de un elemento en las listas de Python

Publicado: 2022-06-29

En esta guía, aprenderá cómo encontrar el índice de un elemento en una lista de Python, usando iteraciones simples y un método de lista integrado index() .

Cuando trabaje con listas de Python, es posible que deba averiguar el índice en el que se encuentra un elemento en particular. Puedes hacer esto por:

  • Recorriendo la lista y verificando si el elemento en el índice actual es igual al valor particular
  • Usando el index()

Aprenderá las dos cosas anteriores en este tutorial. Empecemos.

Listas de Python, revisadas

En Python, una lista es una colección de elementos, del mismo tipo de datos o de tipos diferentes. Son mutables ; puede modificarlos en su lugar sin tener que crear una nueva lista.

Considere este ejemplo de fruits : una lista de 5 frutas diferentes.

 fruits = ["apple","mango","strawberry","pomegranate","melon"]

Puede obtener la longitud de cualquier objeto de Python utilizando la función len() incorporada. Por lo tanto, puede llamar a la función len() con el objeto de la lista ( fruits ) como argumento para obtener su longitud, como se muestra a continuación.

 len(fruits) # Output: 5

Usaremos la lista de fruits como ejemplo de ejecución en este tutorial.

Indexación en listas de Python

Python sigue la indexación cero . Entonces, en cualquier iterable de Python, el primer elemento está en el índice 0, el segundo elemento está en el índice 1, y así sucesivamente. Si la longitud del iterable es k , entonces el último elemento está en el índice k - 1 .

En Python, puede usar la función range() para obtener índices a medida que recorre iterables.

Nota : cuando recorre range(k) , obtiene los índices 0,1,2,…,(k-1). Entonces, al configurar k = len(list) , puede obtener la lista de todos los índices válidos.

La siguiente celda de código explica esto.

 for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon

Ahora que hemos cubierto los conceptos básicos de las listas de Python, aprendamos cómo encontrar el índice de un elemento en una lista.

python-buscar-en-lista

Buscar el índice de un elemento de lista por iteración usando bucles for

Consideremos la lista de fruits de la sección anterior. Aprenderemos cómo encontrar el índice de un elemento específico en esta lista por iteración usando el ciclo for .

Usando la función for Loop y range()

Arreglemos target : el valor que estamos buscando en la lista.

Puede usar la función for loop y range() para obtener la lista de índices de 0 a len(fruits) - 1 .

  • Recorra la lista de frutas accediendo a cada índice.
  • Compruebe si el elemento en el índice actual i es igual al objetivo.
  • Si es True , imprime que el target se ha encontrado en el índice i .
 fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1

En este ejemplo, la cadena de destino 'mango' aparece exactamente una vez (en el índice 1) en la lista de fruits .

Sin embargo, a veces el valor objetivo aparece más de una vez o no aparece en absoluto. Para manejar estos casos, modifiquemos el bucle anterior y envolvamos el contenido dentro de una función llamada find_in_list .

Comprender la definición de la función

La función find_in_list tiene dos parámetros:

  • target : el valor que está buscando, y
  • py_list : la lista de Python en la que está buscando.
 def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

En el cuerpo de la función, inicializamos una lista vacía target_indices . Recorremos la lista y accedemos a los elementos de la lista. Si el objetivo se ha encontrado en un índice particular, agregamos ese índice a la lista target_indices usando el método append() .

Nota : en Python, list.append(item) agrega un item al final de la list .

  • Si nunca se encuentra el destino, target_indices es una lista vacía; se notifica al usuario que el objetivo no está presente en la lista.
  • Si el objetivo se encuentra en más de un índice, target_indices contiene todos esos índices.

A continuación, redefinamos la lista de fruits como se muestra.

Esta vez buscamos la cadena de target 'mango' , que aparece dos veces: en los índices 1 y 4.

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]

Al llamar a la función find_in_list con target y fruits como argumentos, vemos que se devuelven ambos índices.

 target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!

Si intenta buscar 'turnip' que no está presente en la lista de fruits , recibe un mensaje de que no se ha encontrado el objetivo.

Usando la función for Loop y enumerate()

En Python, puede usar la función enumerate() para acceder tanto al índice como a los elementos simultáneamente, sin tener que usar la función range() .

La siguiente celda de código muestra cómo puede usar la función enumerate() para obtener tanto los índices como los elementos.

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon

Ahora, reescribamos la función Python para encontrar el índice de elementos en la lista usando la función enumerate() .

 def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

Al igual que en la sección anterior, ahora puede llamar a la función find_in_list con argumentos válidos.

Puede traducir la definición de función anterior a una comprensión de lista equivalente y lo haremos en la siguiente sección.

Buscar el índice de un elemento de la lista por iteración mediante la comprensión de la lista

La comprensión de listas en Python le permite crear listas a partir de listas existentes en función de alguna condición. Aquí está la construcción general:

 new_list = [<output> for <items in existing iterables> if <condition is true>]

La siguiente figura describe cómo identificar los elementos de la comprensión de listas; usando esto, puede convertir la función find_in_list en una lista de comprensión.

python-buscar-en-lista

Usando lo anterior, la expresión para la comprensión de listas para crear índices objetivo es la siguiente.

 target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Como ejercicio, puede intentar ejecutar el fragmento de código anterior para ver algunos otros ejemplos.

Encuentra el índice de un elemento de la lista usando el método index()

Para encontrar el índice de un elemento en una lista de Python, también puede usar el método .index() . Aquí está la sintaxis general:

 list.index(value,start,end)

Analizando el método anterior:

  • value es el valor objetivo que está buscando.
  • start y end son argumentos posicionales opcionales ; puede usarlos para buscar el índice de un elemento en el segmento de la lista que comienza en el start y se extiende hasta el end - 1 .

Nota : el método .index() devuelve solo el índice de la primera aparición de value en la list . Incluso cuando encuentra el índice de un elemento en un segmento de lista [start: end-1] , este método devuelve solo el índice correspondiente a la primera aparición del elemento.

Revisemos nuestro ejemplo para entender cómo funciona el método .index() .

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1

Aunque hay dos apariciones de 'mango' en la lista de fruits , puede ver que solo se ha devuelto el índice de la primera aparición.

Para obtener el índice de la segunda aparición de mango, podemos buscar en el sector de la lista comenzando en el índice 2 y extendiéndose hasta el índice 5, como se muestra a continuación.

 fruits.index(target,2,5) 4

Cómo manejar errores de valor en Python

Ahora veamos qué sucede si intenta encontrar el índice de un elemento que no está presente en la lista, por ejemplo, 'carrot' .

 target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list

Como se ve en la celda de código anterior, esto arroja un ValueError. En Python, puede manejar esto como una excepción usando los bloques try y except .

La sintaxis general para usar try-except es la siguiente.

 try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception

Usando los bloques try-except anteriores, podemos manejar ValueError como una excepción.

 target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list

El código anterior hace lo siguiente:

  • Si el destino está presente en la lista, devuelve el índice del destino.
  • Si el objetivo no está presente, maneja ValueError como una excepción e imprime el mensaje de error.

Resumiendo

Aquí hay un resumen de los diferentes métodos que ha aprendido para encontrar el índice de un elemento en una lista de Python.

  • Puede usar la función for loop y range() de Python para obtener los elementos y sus índices respectivos. Compruebe si los elementos en los índices coinciden con el objetivo.
  • También puede usar la función enumerate() para acceder simultáneamente al elemento y al índice.
  • Puede usar los dos métodos anteriores dentro de una expresión de comprensión de lista.
  • Para encontrar el índice de un elemento en una lista, también puede usar el método .index() integrado .
  • list.index(value) devuelve el índice de la primera aparición de value en list . Si el valor no está presente, genera un ValueError .
  • Puede buscar a través de una porción determinada de la lista usando list.index(value, start, end) para buscar la aparición de un valor en la porción de la lista [start:end-1] .

A continuación, aprenda a ordenar un diccionario de Python por clave o por valor. ¡Feliz programación en Python!