Aşağıdaki Python kodu, bir Matlab arka planından geldiğinde çok uzun soluklu görünüyor
>>> a = [1, 2, 3, 1, 2, 3]
>>> [index for index,value in enumerate(a) if value > 2]
[2, 5]
Matlab'dayken şunları yazabilirim:
>> a = [1, 2, 3, 1, 2, 3];
>> find(a>2)
ans =
3 6
Bunu Python'da yazmanın kısa bir yöntemi var mı, yoksa sadece uzun versiyona mı bağlıyım?
Python'un sözdiziminin gerekçesinin tüm önerileri ve açıklamaları için teşekkür ederiz.
Numpy web sitesinde aşağıdakileri bulduktan sonra, beğendiğim bir çözüm bulduğumu düşünüyorum:
http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays
Bu web sitesindeki bilgileri yukarıdaki sorunuma uygulamak aşağıdakileri verir:
>>> 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]
Aşağıdakiler daha sonra çalışmalıdır (ancak test etmek için elimde bir Python yorumlayıcısı yok):
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]? Bunun Python'da yapılması biraz garip olmasının nedeni, diğer diller kadar dizin kullanmamasıdır.