Cómo encontrar todas las apariciones de un elemento en una lista

Resuelto Bruce asked hace 13 años • 20 respuestas

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?

Bruce avatar Jun 09 '11 21:06 Bruce
Aceptado

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, xcomo objetivo de variable de bucle descomprime estos pares en el índice iy el elemento de la lista x. Filtramos todos xlos que coinciden con nuestro criterio y seleccionamos los índices ide estos elementos.

Sven Marnach avatar Jun 09 '2011 14:06 Sven Marnach

Si bien no es una solución directamente para listas, numpyrealmente 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.

JoshAdel avatar Jun 09 '2011 14:06 JoshAdel