Buchstaben-Häufigkeit

Author

jbusse

Gegeben: ein String. Wie oft kommt jeder Buchstabe vor?

text = "Hallo Otto!"
text
'Hallo Otto!'

Ein String lässt sich sehr leicht in eine Liste von Buchstaben übersetzen:

list(text)
['H', 'a', 'l', 'l', 'o', ' ', 'O', 't', 't', 'o', '!']

In der Tat ergeben die folgenden zwei Schleifen das identische Ergebnis:

for c in list(text):
    print(c, end="-")
H-a-l-l-o- -O-t-t-o-!-
for c in text:
    print(c, end="-")
H-a-l-l-o- -O-t-t-o-!-

Gesucht: Wir wollen zählen, wie oft jeder einzelne Buchstabe, jedes einzelne Zeichen in diesem String auftaucht. Das Ergebnis wollen wir in einem Dict zaehlung festhalten, das ungefähr so aussieht:

zaehlung = { "H": 1, "l": 3, ...:... }
zaehlung
{'H': 1, 'l': 3, Ellipsis: Ellipsis}

Schritt 1: Wir wollen das Set schluessel als die Menge der Zeichen erzeugen, die in dem String quelle vorkommen. Die Elemente dieser Menge ergeben dann auch die Schlüssel aus unserem Dict ergebnis.

quelle = "Hallo Otto!"

schluessel = set(list(quelle))

ergebnis = {}
# Die Werte aus unserem Dikt-Ergebnis mit 0 initialisieren. 
for s in schluessel:
    ergebnis[s] = 0

ergebnis
{'O': 0, 'o': 0, '!': 0, 'l': 0, 'H': 0, ' ': 0, 't': 0, 'a': 0}

Nun gehen wir durch unseren Strings durch: Die Variable c –kurz für Charakter – nimmt nacheinander jeden Buchstaben aus unserem Eingabetext quelle an. Der Ausdruck ergebnis[c] gibt uns Zugriff auf den Wert zum Schlüssel c aus unserem Dict ergebnis. Wir erhöhen den bisher vorgefundenen Wert (anfangs nach Initialisierung 0) um 1. (Und wir drucken die Variablen zur Kontrolle aus, hier in einer fancy Syntax, kommt später):

for c in quelle:
    ergebnis[c] = ergebnis[c] + 1

    # print mit f-string
    print(f"{c=}, ergebnis[{c}]= {ergebnis[c]}")

ergebnis
c='H', ergebnis[H]= 1
c='a', ergebnis[a]= 1
c='l', ergebnis[l]= 1
c='l', ergebnis[l]= 2
c='o', ergebnis[o]= 1
c=' ', ergebnis[ ]= 1
c='O', ergebnis[O]= 1
c='t', ergebnis[t]= 1
c='t', ergebnis[t]= 2
c='o', ergebnis[o]= 2
c='!', ergebnis[!]= 1
{'O': 1, 'o': 2, '!': 1, 'l': 2, 'H': 1, ' ': 1, 't': 2, 'a': 1}

Zusammengefasst:

quelle = "Hallo Otto!"
ergebnis = {}

schluessel = set(list(quelle))
print("schluessel:", schluessel)

# Dict ergebnis: Werte mit 0 initialisieren
# konservativ:
#
# for s in schluessel:
#    ergebnis[s] = 0
#
# eleganter mit Dict-Comprehension:
#
ergebnis = { s: 0  for s in schluessel }

# durch quelle durchgehen
for c in list(quelle):
    # auf den bisherigen Wert 1 draufaddieren
    ergebnis[c] = ergebnis[c] + 1

print("ergebnis:", ergebnis)
schluessel: {'O', 'o', '!', 'l', 'H', ' ', 't', 'a'}
ergebnis: {'O': 1, 'o': 2, '!': 1, 'l': 2, 'H': 1, ' ': 1, 't': 2, 'a': 1}