En MATLAB es fácil encontrar los índices de valores que cumplan una condición particular:función de estilo MATLAB find() en Python
>> a = [1,2,3,1,2,3,1,2,3];
>> find(a > 2) % find the indecies where this condition is true
[3, 6, 9] % (MATLAB uses 1-based indexing)
>> a(find(a > 2)) % get the values at those locations
[3, 3, 3]
¿Cuál sería la mejor manera de hacer esto en Python?
Hasta ahora, he encontrado lo siguiente. Para obtener sólo los valores:
>>> a = [1,2,3,1,2,3,1,2,3]
>>> [val for val in a if val > 2]
[3, 3, 3]
Pero si quiero que el índice de cada uno de esos valores es un poco más complicado:
>>> a = [1,2,3,1,2,3,1,2,3]
>>> inds = [i for (i, val) in enumerate(a) if val > 2]
>>> inds
[2, 5, 8]
>>> [val for (i, val) in enumerate(a) if i in inds]
[3, 3, 3]
¿Hay una mejor manera de hacer esto en Python, especialmente para condiciones arbitrarias (no solo 'val> 2')?
Encontré funciones equivalentes a MATLAB 'buscar' en NumPy pero actualmente no tengo acceso a esas bibliotecas.
Su último ejemplo podría ser '[a [i] para i en inds] ', que es un poco más simple. – sverre