下面的 Python 代码在 Matlab 背景下显得非常冗长
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
在 Matlab 中,我可以写:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
有没有一种用 Python 编写这个代码的简捷方法,或者我只是坚持使用长版本?
感谢您对 Python 语法基本原理的所有建议和解释。
在这个乏味的网站上找到以下内容后,我想我找到了一个我喜欢的解决方案:
Http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays
将该网站提供的信息应用于我的上述问题,可以得出以下结论:
>>> 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]
接下来应该可以工作(但是我手头没有 Python 解释器来测试它) :
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]