在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′)?
我在NumPy中发现了相当于MATLAB’find’的函数,但是我目前没有访问这些库。