MATLAB-style find() en Python

Dans MATLAB, il est facile de trouver les indices des valeurs qui satisfont à une condition particulière:

>> 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]

Quelle serait la meilleure façon de le faire en Python?

Jusqu'à présent, je suis venu avec la suivante. Juste obtenir les valeurs:

>>> a = [1,2,3,1,2,3,1,2,3]
>>> [val for val in a if val > 2]
[3, 3, 3]

Mais si je veux l'index de chacune de ces valeurs, il est un peu plus compliqué:

>>> 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]

Est-il une meilleure façon de le faire en Python, en particulier pour arbitraire conditions (pas juste "val > 2')?

J'ai trouvé des fonctions équivalentes à MATLAB "trouver" dans NumPy mais je n'ont pas actuellement accès à ces bibliothèques.

  • Votre dernier exemple pourrait être [a[i] for i in inds], ce qui est un peu plus simple.
InformationsquelleAutor user344226 | 2011-05-10