Übungsaufgaben 12
Tupel, Sets und Iterables
Übungsaufgabe 12.01: Wortfrequenzen, once again
Erstellen Sie eine neue Version von freq.py
mit folgenden kleinen Verbesserungen:
- Für die Effizienz: Die Stopwörter sollten aus der Datei in ein Set gelesen werden statt in eine Liste.
- Für die Lesbarkeit: Die Ausgabe sollte mit Hilfe der
items
-Methode über das Dictionary mit den Frequenzen iterieren.
Übungsaufgabe 12.02: Bigramme
Schreiben Sie eine Generator-Funktion bigrams
, die einen Text als Liste von Wörtern nimmt und
ein Iterable mit den Bigrammen als Tupel der Länge 2 zurückgibt. Bigramme sind Paare von zwei aufeinanderfolgenden Wortvorkommnissen
in einem Text. Zum Beispiel:
>>> list(bigrams(['I', 'read', 'a', 'book', 'about', 'the', 'history', 'of', 'America', '.']))
[('I', 'read'), ('read', 'a'), ('a', 'book'), ('book', 'about'), ('about', 'the'), ('the', 'history'), ('of', 'America'), ('America', '.')]
Übungsaufgabe 12.03: n-Gramme
Schreiben Sie eine Generator-Funktion ngrams
, die einen Text als Liste von Wörtern nimmt und
ein Iterable mit n-Grammen als Tupel der Länge n zurückgibt. n-Gramme sind Tupel von n aufeinanderfolgenden Wortvorkommnissen
in einem Text. Ihre Funktion sollte einen zusätzlichen Parameter haben, mit dem der gewünschte Wert für n angegeben wird. Zum Beispiel:
>>> list(ngrams(2, ['I', 'read', 'a', 'book', 'about', 'the', 'history', 'of', 'America', '.']))
[('I', 'read'), ('read', 'a'), ('a', 'book'), ('book', 'about'), ('about', 'the'), ('the', 'history'), ('of', 'America'), ('America', '.')]
>>> list(ngrams(3, ['I', 'read', 'a', 'book', 'about', 'the', 'history', 'of', 'America', '.']))
[('I', 'read', 'a'), ('read', 'a', 'book'), ('a', 'book', 'about'), ('book', 'about', 'the'), ('about', 'the', 'history'), ('the', 'history', 'of'), ('of', 'America', '.')]
Übungsaufgabe 12.04: Comprehensions lesen
Was geben die folgenden Ausdrücke zurück? Schreiben Sie es auf, möglichst, ohne es auszuprobieren.
{wert for farbe, wert in (('Karo', '7'), ('Herz', '7'), ('Herz', 'König'), ('Pik', 'As')) if farbe in ('Karo', 'Herz')}
sum((n for n in range(10) if n % 3 == 0))
[abs(i) for i in range(-2, 3)]
[i for i in itertools.chain(range(3), range(4))]
Übungsaufgabe 12.05: Comprehensions schreiben
Schreiben Sie jeweils eine Comprehension, die Folgendes zurückgibt:
- Ein Dictionary, das jeder durch 7 teilbaren nichtnegativen Zahl unter 100 ihr Quadrat zuordnet.
- Eine Liste mit denselben Strings wie in der Liste
words
, aber jeweils rückwärts gelesen. Für die Listewords = ['Python', 'macht', 'Spaß']
sollte Ihre Comprehension z.B.['nohtyP', 'thcam', 'ßapS']
zurückgeben. - Ein Set mit den Anfangsbuchstaben aller Wörter in der Liste
words
. Für die Listewords = ['Zehn', 'zahme', 'ziegen', 'ziehen', 'zehn', 'Zentner', 'Zucker', 'zum', 'Zoo']
sollte Ihre Comprehension z.B.{'Z', 'z'}
zurückgeben.