Matlab बैकग्राउंड से आने पर निम्नलिखित पायथन कोड बहुत लंबे वाइंडेड प्रतीत होते हैं
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
जब मतलब में मैं लिख सकता हूँ:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
क्या पायथन में इसे लिखने का एक छोटा हाथ तरीका है, या मैं सिर्फ लंबे संस्करण के साथ रहना चाहता हूं?
अजगर के वाक्य विन्यास के लिए तर्क के सभी सुझावों और स्पष्टीकरण के लिए धन्यवाद।
सुन्न वेबसाइट पर निम्नलिखित खोजने के बाद, मुझे लगता है कि मुझे एक समाधान मिला है जो मुझे पसंद है:
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]
निम्नलिखित को तब काम करना चाहिए (लेकिन मुझे इसका परीक्षण करने के लिए हाथ पर पायथन दुभाषिया नहीं मिला है):
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]? पायथन में ऐसा करने का कारण थोड़ा अजीब है क्योंकि यह अन्य भाषाओं की तरह अनुक्रमित का उपयोग नहीं करता है।