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

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

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 índice de método de lista incorporado ()

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 frutas: 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 (frutas) como argumento para obtener su longitud, como se muestra a continuación.

len(fruits)
# Output: 5

Usaremos la lista de frutas 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 el rango (k), obtiene los índices 0,1,2,…,(k-1). Entonces, al configurar k = len (lista), 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.

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

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

Usando la función for Loop y range()

Arreglemos el objetivo: 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 (frutas) – 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 Verdadero, imprime que el objetivo 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 frutas.

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 los contenidos 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:

  • objetivo: 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 elemento al final de la lista.

  • 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 frutas como se muestra.

Esta vez estamos buscando la cadena de destino ‘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 destino y frutas como argumentos, vemos que se devuelven ambos índices.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Si intenta buscar ‘nabo’ que no está presente en la lista de frutas, 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.

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() integrado. Aquí está la sintaxis general:

list.index(value,start,end)

Analizando el método anterior:

  • valor 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 inicio y se extiende hasta el final: 1.

Nota: El método .index() devuelve solo el índice de la primera aparición de valor en la lista. 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 frutas, 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, ‘zanahoria’.

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 ValorError. 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 destino 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(valor) devuelve el índice de la primera aparición de valor en la lista. Si el valor no está presente, genera un ValueError.
  • Puede buscar en 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!