Übungsaufgaben 12

Tupel, Sets und Iterables

Übungsaufgabe 12.01: Wortfrequenzen, once again

Erstellen Sie eine neue Version von freq.py mit folgenden kleinen Verbesserungen:

  1. Für die Effizienz: Die Stopwörter sollten aus der Datei in ein Set gelesen werden statt in eine Liste.
  2. 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.

  1. {wert for farbe, wert in (('Karo', '7'), ('Herz', '7'), ('Herz', 'König'), ('Pik', 'As')) if farbe in ('Karo', 'Herz')}
  2. sum((n for n in range(10) if n % 3 == 0))
  3. [abs(i) for i in range(-2, 3)]
  4. [i for i in itertools.chain(range(3), range(4))]

Übungsaufgabe 12.05: Comprehensions schreiben

Schreiben Sie jeweils eine Comprehension, die Folgendes zurückgibt:

  1. Ein Dictionary, das jeder durch 7 teilbaren nichtnegativen Zahl unter 100 ihr Quadrat zuordnet.
  2. Eine Liste mit denselben Strings wie in der Liste words, aber jeweils rückwärts gelesen. Für die Liste words = ['Python', 'macht', 'Spaß'] sollte Ihre Comprehension z.B. ['nohtyP', 'thcam', 'ßapS'] zurückgeben.
  3. Ein Set mit den Anfangsbuchstaben aller Wörter in der Liste words. Für die Liste words = ['Zehn', 'zahme', 'ziegen', 'ziehen', 'zehn', 'Zentner', 'Zucker', 'zum', 'Zoo'] sollte Ihre Comprehension z.B. {'Z', 'z'} zurückgeben.