Trovare l’indice degli elementi in base a una condizione usando la comprensione dell’elenco python

| | |

Il seguente codice Python sembra essere molto prolisso quando proviene da uno sfondo Matlab

>>> un = [1, 2, 3, 1, 2, 3] >>> [index for index,value in enumerate(a) if value > 2] [2, 5] 

Quando in Matlab posso scrivere:

>> a = [1, 2, 3, 1, 2, 3]; >> find(a>2) ans = 3 6 

C'è un metodo a mano corta per scriverlo in Python, o mi limito alla versione lunga?


Grazie per tutti i suggerimenti e le spiegazioni sulla logica della sintassi di Python.

Dopo aver trovato quanto segue sul sito Web di numpy, penso di aver trovato una soluzione che mi piace:

http:// docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays

Applicare le informazioni da quel sito Web al mio problema sopra, sarebbe dai quanto segue:

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

Quindi dovrebbe funzionare (ma non ho un interprete Python a portata di mano per testarlo):

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]