Python’da bir öğenin listede kaç tane olduğu nasıl sayılır?

Bir listemiz olduğunu varsayalım.

İlişkili olduğu konular : how to, nasıl

Bir listemiz olduğunu varsayalım. Bu listede istediğimiz bir elemanın kaç kere bulunduğunu nasıl sayabiliriz?

Listedeki bir öğenin tekrarlarını sayma

Tek bir öğenin tekrarlarını saymak için: count()

>>> l = ["a","b","b"]
>>> l.count("a")
1
>>> l.count("b")
2

Listedeki tüm öğelerin tekrarlarını saymak, listeyi “saymak” veya bir çetele sayacı oluşturmak olarak da bilinir.

Tüm öğeleri count() ile sayma

Öğelerin tekrarlarını saymak için bir liste üzerinden döngü kurabiliriz:

[[x,l.count(x)] for x in set(l)]

(veya benzer şekilde bir sözlükle dict((x,l.count(x)) for x in set(l)))

Örnek:

>>> l = ["a","b","b"]
>>> [[x,l.count(x)] for x in set(l)]
[['a', 1], ['b', 2]]

>>> dict((x,l.count(x)) for x in set(l))
{'a': 1, 'b': 2}

Counter() ile tüm öğeleri sayma

Alternatif olarak, collections kütüphanesinde daha hızlı bir çözüm bulunur:

Counter(l)

Örnek:

>>> l = ["a","b","b"]
>>> from collections import Counter
>>> Counter(l)
Counter({'b': 2, 'a': 1})

Counter ne kadar hızlı?

İki liste için yineleme yöntemini ve Counter()’ın hızlarını kontrol edelim. Her iki yöntemi de birkaç değerle deneyelim:

from __future__ import print_function
import timeit

t1=timeit.Timer('Counter(l)', \
                'import random;import string;from collections import Counter;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
                )

t2=timeit.Timer('[[x,l.count(x)] for x in set(l)]',
                'import random;import string;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
                )

print("Counter(): ", t1.repeat(repeat=3,number=10000))
print("count():   ", t2.repeat(repeat=3,number=10000)

Ve çıktı:

Counter():  [0.46062711701961234, 0.4022796869976446, 0.3974247490405105]
count():    [7.779430688009597, 7.962715800967999, 8.420845870045014]

Görüldüğü gibi Counter() oldukça hızlı. Hatta bu hız daha büyük listelerde daha belirgin hale gelecektir. Yineleme metodu O(n^2) ile çalışırken Counter O(n) ile çalışır.

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python101 – Özyineleme

Özyineleme Özyinelemeli işlev, yine kendisini çağıran bir işlevdir.

Python site-paketi dosyaları hangi klasördedir?

Python’da genel ve kullanıcı olmak üzere iki tür site paketi dizini bulunur.

Python’da bir işlevin özel bir durum (exception) oluşturmasını nasıl sınarız?

Python işlevinin bir özel durum oluşturmasını nasıl sınarsınız? Yalnızca bir işlev beklenen bir özel durum oluşturmadığında başarısız olan bir testi nasıl yazarsınız? Kısa Cevap: self.

Python’da dosya boyutuna nasıl bakarım?

Dosya boyutunun önemli olduğu bir uygulama yapmaya çalışıyorum.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.