Statistik Iterabler mit Python
Die Klasse ›Counter‹ zählt das Vorkommen von Werten in einem Iterablen. Es ergibt sich ein Objekt jener Klasse, welches wie eine Zuordnung ausgelesen werden kann.
Wir sehen, daß das Wort „beispielsweise“ vier „e“ enthält und im aktuellen Verzeichnis jedes Wort genau einmal vorkommt.
- Konsolenprotokoll
from pprint import pprint
from collections import Counter
"beispielsweise"
'beispielsweise'
Counter( _ )
Counter({'e': 4, 'i': 3, 's': 3, 'b': 1, 'p': 1, 'l': 1, 'w': 1})
pprint( _ )
Counter({'e': 4, 'i': 3, 's': 3, 'b': 1, 'p': 1, 'l': 1, 'w': 1})
tuple( _ )
('b', 'e', 'i', 's', 'p', 'l', 'w')
Ein Counter-Objekt ist selber auch wieder iterabel und liefert als Iterables die einzelnen gruppierten Werte ohne ihre Zähler, wie oben mit »tuple« gezeigt wurde.
- Konsolenprotokoll
pprint( Counter( "beispielsweise" ))
Counter({'e': 4, 'i': 3, 's': 3, 'b': 1, 'p': 1, 'l': 1, 'w': 1})
- Konsolenprotokoll
tuple( Counter( "beispielsweise" ))
('b', 'e', 'i', 's', 'p', 'l', 'w')
- Konsolenprotokoll
dir()
['Counter', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'pprint']
Counter( _ )
Counter({'Counter': 1, '__annotations__': 1, '__builtins__': 1, '__doc__': 1, '__loader__': 1, '__name__': 1, '__package__': 1, '__spec__': 1, 'pprint': 1})
pprint( _ )
Counter({'Counter': 1,
'__annotations__': 1,
'__builtins__': 1,
'__doc__': 1,
'__loader__': 1,
'__name__': 1,
'__package__': 1,
'__spec__': 1,
'pprint': 1})- Konsolenprotokoll
pprint( Counter( dir() ))
Counter({'Counter': 1,
'__annotations__': 1,
'__builtins__': 1,
'__doc__': 1,
'__loader__': 1,
'__name__': 1,
'__package__': 1,
'__spec__': 1,
'pprint': 1})
Zähler
Die einzelnen Einträge eines Zählerobjekts können mit »getitem« abgerufen werden.
- Protokoll
from collections import Counter
c = Counter( "beispielsweise" )
Counter({'e': 4, 'i': 3, 's': 3, 'b': 1, 'p': 1, 'l': 1, 'w': 1})
c[ "e" ]
4
Beispiel
- Vergleiche von Zählern
from collections import Counter
Counter( "abc" )== Counter( "acb" )
True
Counter( "abc" )== Counter( "acbb" )
False
Übersicht Iterable und Aufrufbare
- Iteratoren (und damit auch Iterable)
- Ergebnisse von »enumerate«
from multiprocessing.pool import job_counter
job_counterfrom sys import stdin
stdin- Iterable
- alle Iteratoren
- str-Objekte (»"abc"«)
- list-Objekte (»dir()«)
- tuple-Objekte (»tuple()«)
- dict-Objekte (»dict()«)
from itertools import count
count()- range-Ergebnisse
- Counter-Objekte
- Aufrufbare, die Iteratoren akzeptieren
- »next«
- Aufrufbare, die Iterable akzeptieren
- »dict«
- »iter«
- »tuple«
- »sum« (nur Iterable, die Zahlen liefern)
- »min«
- »max«
- »Counter« (nach »from collections import Counter«)
- ›str.join‹ (d.h. die join-Methode eines str-Objektes)
Übungsaufgaben
/ Wortfrequenzen
Erstellen Sie durch eine Abfolge von Python -Anweisungen eine Statistik der Häufigkeit der Wörter in dem Text ›t‹.
- Der Text ›t‹
t = 'Sie fürchten zu viel zu tun und tun zu wenig und fürchten zu wenig zu tun und tun zu viel'
/ Wortfrequenzen °
Schreiben Sie ein Anagrammprädikat ›a‹, eine Funktion, die ›True‹ ergibt, wenn sie mit zwei Wörtern aufgerufen wird, deren eines ein Anagramm des anderen ist.
- Beispiel
a( 'wiki', 'kiwi' )
True
a( 'wikki', 'kiwi' )
False