โค้ด 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
หลังจากค้นหาสิ่งต่อไปนี้ในเว็บไซต์ 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 ค่อนข้างอึดอัดเพราะไม่ได้ใช้ดัชนีมากเท่ากับภาษาอื่น ๆ