对于Matlab背景的人来说,下面的Python代码似乎很冗长
>>> 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语法的建议和解释。
在numpy网站上找到以下内容后,我认为我已经找到了一种我喜欢的解决方案:
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]
[idx for idx in range(len(a)) if a[idx] > 2]
怎么样?这在 Python 中有点棘手,因为它不像其他语言那样经常使用索引。 - NullUserException