Le code Python suivant semble être très long lorsqu'il vient d'un arrière-plan Matlab
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
Quand dans Matlab je peux écrire:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
Existe-t-il une méthode courte pour écrire ceci en Python, ou est-ce que je m'en tiens simplement à la version longue?
Merci pour toutes les suggestions et explications sur la justification de la syntaxe de Python.
Après avoir trouvé ce qui suit sur le site numpy, je pense avoir trouvé une solution que j'aime:
http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays
L'application des informations de ce site Web à mon problème ci-dessus donnerait ce qui suit:
>>> from numpy import array
>>> a = array([1, 2, 3, 1, 2, 3])
>>> b = a>2
array([False, False, True, False, False, True], dtype=bool)
>>> r = array(range(len(b)))
>>> r(b)
[2, 5]
Ce qui suit devrait alors fonctionner (mais je n'ai pas d'interpréteur Python sous la main pour le tester):
class my_array(numpy.array):
def find(self, b):
r = array(range(len(b)))
return r(b)
>>> a = my_array([1, 2, 3, 1, 2, 3])
>>> a.find(a>2)
[2, 5]
[idx for idx in range(len(a)) if a[idx] > 2]? La raison pour laquelle cela est un peu difficile à faire en Python est qu'il n'utilise pas autant les index que les autres langages.