2008-10-09 31 views
91

Dizideki öğe sayısını nasıl sayabilirim, çünkü mantıksal array.count (dizgi) dizisinin aksine dizideki tüm öğeleri saymaz, yalnızca dize olaylarının sayısını arar .Python'da sayıcı öğeleri sayma

+0

Bu, bir listede sayma öğelerinin bir kopyası değil, çünkü bir dizi daha yüksek boyutlu olabilir, değil mi? Bir dizinin len() 'si dizi 1D olmadığı sürece dizideki öğe sayısı değildir. Listeler listesinin de daha yüksek boyutlu olduğunu iddia edebilirsiniz, ancak üst seviye listesi için daha açık bir öncelik vardır. Bu üst seviye listesi için, elemanların sayısı sadece 'len()' dir, çünkü temelde 1D'dir. –

cevap

212

Len() yöntemi, listedeki öğe sayısını döndürür.

dizimi:

len(myArray) 

Örn:

myArray = [1, 2, 3] 
len(myArray) 

Çıktı:

3 

+0

Cevabınızı açıklayabilir misiniz;) –

+0

Bu sadece düz, tek boyutlu bir liste veya dizi için çalışır, ancak 'print len ​​([[0, 0], [0, 0]])' 2 olduğu gibi çıkar len (dizi ([[0, 0], [0, 0]])). –

3

Veya,

Oopy olmak istiyorsanız
myArray.__len__() 

; "len (myArray)" yazması çok daha kolay! :)

+2

Bu kesin bir Yuk. – UnkwnTech

+0

@Gregg Lind, Bu bir yarış durumu getirmiyor. (Ancak, o kadar şanslı olduğu gibi.) –

+0

Yarış durumu benimle başka bir poster arasındaydı! Aşağıda * daha da düşürülen yanıtı * not edin! –

24

len, nesne içindeki öğe sayısını almak için verilen kapsayıcı nesnesinin __len__ üye işlevini çağıran yerleşik bir işlevdir.

Çift alt çizgi ile kaplanmış işlevler genellikle Python'daki (kapsayıcı, sayı vb.) Standart arabirimlerden birini uygulayan "özel yöntemler" dir. Özel yöntemler, sözdizimsel şeker (nesne oluşturma, kapsayıcı indeksleme ve dilimleme, öznitelik erişimi, yerleşik işlevler, vb.) Yoluyla kullanılır.

obj.__len__()10'u kullanmak, özel yöntemi kullanmanın doğru yolu olmaz, ancak neden diğerlerinin neden bu kadar çok değiştiğini anlamıyorum.

+0

Özellikle ikimizin de bahsettiğimizde bu kötü bir formdu. “Gerçekten” nin hangi uzunlukta olduğunu anlamak kendi başına önemlidir. –

1

Bunu görmeden önce kendime "Bunu yapmanın bir yolunu bulmalıyım" diye düşündüm.

for tempVar in arrayName: tempVar+=1 

Ve sonra "Bunu yapmanın daha basit bir yolu olmalı" diye düşündüm. ve haklıydım.

len(arrayName)

11

Eğer çok boyutlu bir dizi, len varsa() size aradığınız değer vermek olmayabilir. Örneğin:

a = np.arange(10).reshape(2, 5) 
print len(a) == 2 

Bu kod bloğu size dizinin boyutunu anlatan gerçek dönecektir bu 2B dizide 10 element gerçekte var, Ancak 2'dir. Çok-boyutlu diziler halinde, len() rasgele şekilde bir çok-boyutlu bir dizide eleman sayısını almak için

len(a) == np.shape(a)[0] 

yani dizinin ilk boyutun uzunluğu verir:

size = 1 
for dim in np.shape(a): size *= dim 
+0

Bu gerçekten kullanışlı görünüyor, ancak np neyin başlangıç ​​olarak başlatılması anlamına geliyor? Eğer boş bir liste olarak başlatırsam, o zaman python "liste" nesnesinin "düzenleme" özelliği olmadığını söyler – russellmania

+1

@russellmania 'np ' – dexteritas