다음 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
이것을 파이썬으로 작성하는 짧은 방법이 있습니까, 아니면 긴 버전을 고수합니까?
파이썬 구문의 근거에 대한 모든 제안과 설명에 감사드립니다.
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]? 파이썬에서 이것이 약간 어색한 이유는 다른 언어만큼 색인을 사용하지 않기 때문입니다.