Функция find () в стиле MATLAB в Python

В MATLAB легко найти индексы значений, которые удовлетворяют определенному условию:

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

Каким будет лучший способ сделать это в Python?

Итак, я пришел со следующим. Чтобы просто получить значения:

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

Но если мне нужен индекс каждого из этих значений, это немного сложнее:

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

Есть ли лучший способ сделать это в Python, особенно для произвольных условий (не только 'val> 2 ')?

Я нашел функции, эквивалентные MATLAB' find 'в NumPy, но в настоящее время у меня нет доступа к этим библиотекам.

57
задан Michael Currie 4 July 2015 в 05:53
поделиться