В 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, но в настоящее время у меня нет доступа к этим библиотекам.