Cómo encontrar todas las apariciones de un elemento en una lista
index()
dará la primera aparición de un elemento en una lista. ¿Existe algún truco interesante que devuelva todos los índices de una lista para un elemento?
Puede utilizar una lista de comprensión con enumerate
:
indices = [i for i, x in enumerate(my_list) if x == "whatever"]
El iterador enumerate(my_list)
produce pares (index, item)
para cada elemento de la lista. El uso i, x
como objetivo de variable de bucle descomprime estos pares en el índice i
y el elemento de la lista x
. Filtramos todos x
los que coinciden con nuestro criterio y seleccionamos los índices i
de estos elementos.
Si bien no es una solución directamente para listas, numpy
realmente brilla para este tipo de cosas:
import numpy as np
values = np.array([1,2,3,1,2,4,5,6,3,2,1])
searchval = 3
ii = np.where(values == searchval)[0]
devoluciones:
ii ==>array([2, 8])
Esto puede ser significativamente más rápido para listas (matrices) con una gran cantidad de elementos en comparación con algunas de las otras soluciones.