Kode Python berikut tampaknya sangat bertele-tele ketika datang dari latar belakang Matlab
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
Saat di Matlab saya bisa menulis:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
Apakah ada metode tangan pendek untuk menulis ini dengan Python, atau apakah saya tetap menggunakan versi panjang?
Terima kasih atas semua saran dan penjelasan tentang alasan sintaksis Python.
Setelah menemukan yang berikut di situs web numpy, saya rasa saya telah menemukan solusi yang saya suka:
http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays
Menerapkan informasi dari situs web itu ke masalah saya di atas, akan memberikan yang berikut:
>>> 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]
Berikut ini seharusnya berfungsi (tetapi saya belum memiliki juru bahasa Python untuk mengujinya):
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]? Alasan mengapa hal ini agak canggung untuk dilakukan dengan Python adalah karena ia tidak menggunakan indeks sebanyak bahasa lain.