Mã Python sau dường như rất dài khi đến từ nền Matlab
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
Khi ở trong Matlab, tôi có thể viết:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
Có phương pháp viết tay ngắn nào để viết điều này bằng Python không, hay tôi chỉ sử dụng phiên bản dài?
Cảm ơn bạn vì tất cả các đề xuất và giải thích về cơ sở lý luận cho cú pháp của Python.
Sau khi tìm thấy những điều sau trên trang web numpy, tôi nghĩ rằng tôi đã tìm thấy một giải pháp mà tôi thích:
http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays
Áp dụng thông tin từ trang web đó cho vấn đề của tôi ở trên, sẽ đưa ra kết quả sau:
>>> 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]
Sau đó, những điều sau sẽ hoạt động (nhưng tôi không có trình thông dịch Python trong tay để kiểm tra nó):
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]? Lý do khiến điều này hơi khó xử trong Python là vì nó không sử dụng chỉ mục nhiều như các ngôn ngữ khác.