Collections.Counter Sınıfı Hakkında Yardım

Metinde gecen karakterleri sayma ile ilgili forumda actigim konuya Sn. @EkremDincel in verdigi cevaba istinaden nette counter ile ilgili arastirmalarimda asagidaki koda rastladim ve kendi metnime uyarladim. Cikti olarak da ( a, b, c, ve d ) harflerinin sayilarini vermesini istedim. Fakat kodda anlayamadigim uygulamalar var mesela (‘u’, _count[‘u’]) kod dizimini hic anlamlandiramadim. 1. ve 3. print iceriklerini ise anlamlandirmaya calismadim bile. Bu kodlarin turkce meali ile ilgili bilgi verebilirmisiniz.

from collections import Counter
_count = Counter()
_count.update("""Bu programlama dili Guido Van Rossum adlı Hollandalı bir programcı
tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Çoğu insan,
 isminin Python olmasına aldanarak, bu programlama dilinin, adını piton
yılanından aldığını düşünür. Ancak zannedildiğinin aksine bu programlama dilinin
adı piton yılanından gelmez. Guido Van Rossum bu programlama dilini, The Monty
Python adlı bir İngiliz komedi grubunun, Monty Python’s Flying Circus adlı
gösterisinden esinlenerek adlandırmıştır. Ancak her ne kadar gerçek böyle olsa
da, Python programlama dilinin pek çok yerde bir yılan figürü ile temsil
edilmesi neredeyse bir gelenek halini almıştır.""")
print('%s : %d' % ('u', _count['u']))
print('\n')
for char in 'abcd':
    print('%s : %d' % (char, _count[char])) 

**Netteki Asil Kod**
 
from collections import Counter

_count = Counter()
_count.update('Welcome to Guru99 Tutorials!')
print('%s : %d' % ('u', _count['u']))
print('\n')
for char in 'Guru':
    print('%s : %d' % (char, _count[char]))

_count = Counter() satırında Counter sınıfından _count isimli bir örnek oluşturulmuş.

_count.update("...") satırında ise metinde yer alan her bir karakter ve karakterlerin metinde kaç kere geçtiği _count sözlüğüne eklenmiş. Burada karakter, anahtar, karakterin tekrarlanma sayısı ise bu anahtarın değeridir.

print('%s : %d' % ('u', _count['u'])) ifadesindeki %s karakter dizileri için kullanılan biçim belirtecidir. %d ise sayılar için kullanılan biçim belirtecidir. Kullanımı şöyle:

print("%s" % ("hello",))  # Ekrana hello yazdırılır.
print("%d" % (2,)) # Ekrana 2 yazdırılır.

Bu yukarıdaki biçim belirteçleri Python’a C’den miras olarak geçmiştir. Karakter dizisi biçimlendirmeniz gerektiğinde isterseniz bu biçim belirteçlerini kullanabilirsiniz, isterseniz str sınıfının format metodunu kullanabilirsiniz, veya isterseniz f-string de kullanabilirsiniz. Tercih size kalmış.

O halde yukarıdaki ifadeye tekrar bir bakalım. Ekrana yazdırılacak ilk şeyi temsil etmesi için %s biçim belirteci kullanılmış. Demek ki bu bir karakter dizisi. Bu karakter dizisi de "u" karakteriymiş. Ekrana yazdırılacak ikinci şey için de %d biçim belirteci kullanılmış. O halde bu da bir sayı. Bu sayı da _count["u"].

_count["u"]'nun sayı olduğunu nereden biliyoruz? Hatırlayacağınız gibi, "u" karakteri, _count sözlüğünün anahtarıydı ve bu anahtarın değeri de "u" karakterinin metindeki tekrarlanma sayısıydı.

O halde print('%s : %d' % ('u', _count['u'])) ifadesinin bize şöyle bir çıktı vermesi gerekir:

u : 13

Buraya kadar anlattıklarım anlaşıldıysa, for döngüsünde yapılan işlem de anlaşılabilir diye tahmin ediyorum.

Gayet net anlatmissiniz. Tesekkur ederim.Sanirim bu ornek yazildiginda f string icat edilmemisti.:slight_smile: Affiniza siginarak bu kutuphane ile for yerine while ile nasil cozum uretebiliriz, ben beceremedim de.

print(f" {char} Harfi metinde ", _count[char], " defa gecmektedir.") ```
seklinde cok daha okunakli oluyor benim icin.

Rica ederim, kolay gelsin.

O ne demek?

Her for x in y: z, _iter = iter(y); while True { try { x = next(_iter); } except StopIteration { break; } z; } gibi bir seye donusuyor, onu diyorsan.

bu kullanımı ilk kez görüyorum :slight_smile: ama mantık doğru

Istedigimiz parametreleri for dongusune vermek yerine ( Ornekte a, b ,c ve d demisim, ) metindeki tum harflerin toplamda kac kez gectigini while dongusu ile bu kutuphane ile cozebilirmiyiz demek istedim. Baska bir konuda cevabi ogrenmistim ama orda kutuphane kullanilmamisti. Kutuphanenin kullanimindaki kod satiriyla, kullanilmadan gerceklestirilen cozumun kod satirlarini karsilastirmak istiyorum.

Counter zaten bunu hesaplıyor, _count değişkenini ekrana yazdırmayı deneyin. _count değişkenini bir sözlük olarak da kullanabilirsiniz.

@EkremDincel Benden cok yasayin. :woozy_face: :woozy_face: :woozy_face: :woozy_face: Ben illa bir arguman verilmesi gerekir diye dusunup while ile kafayi siyirmisken elin adami parametre vermeden de yapsin diye dusunup cozmus. Cok tesekkurler.