In diesem Lernprogramm erfahren Sie, wie Sie das Zählerobjekt aus dem Sammlungsmodul von Python verwenden.
Wenn Sie in Python mit langen Sequenzen arbeiten, z. B. Python-Listen oder -Strings, müssen Sie möglicherweise manchmal die Elemente speichern, die in der Sequenz vorkommen, und wie oft sie vorkommen.
Ein Python-Wörterbuch ist eine geeignete eingebaute Datenstruktur für solche Anwendungen. Die Counter-Klasse von Python aus dem Sammlungsmodul kann dies jedoch vereinfachen, indem sie einen Zähler erstellt, der ein Wörterbuch von Elementen und ihrer Anzahl in der Sequenz ist.
In den nächsten Minuten lernen Sie Folgendes:
- Verwenden Sie das Counter-Objekt von Python
- Erstellen Sie ein Python-Wörterbuch, um Zählwerte von Elementen in einem Iterable zu speichern
- Schreiben Sie das Wörterbuch mithilfe des Zählers von Python mit einer vereinfachten Syntax neu
- Führen Sie Operationen wie das Aktualisieren und Subtrahieren von Elementen durch und finden Sie Schnittpunkte zwischen zwei Gegenobjekten
- Holen Sie sich die häufigsten Elemente im Zähler mit der Methode most_common()
Lass uns anfangen!
Inhaltsverzeichnis
Python Collections-Modul und Counter-Klasse
Sie werden häufig ein Python-Wörterbuch verwenden, um die Elemente und ihre Anzahl in einem Iterable zu speichern. Die Elemente und die Anzahl werden als Schlüssel bzw. Werte gespeichert.
Da die Counter-Klasse Teil des integrierten Sammlungsmoduls von Python ist, können Sie sie folgendermaßen in Ihr Python-Skript importieren:
from collections import Counter
Nachdem Sie die Counter-Klasse wie erwähnt importiert haben, können Sie ein Counter-Objekt wie gezeigt instanziieren:
<counter_object> = Counter(iterable)
Hier:
- Iterable ist eine beliebige gültige Python-Iterable, wie z. B. eine Python-Liste, ein String oder ein Tupel.
- Die Elemente in der Iterable sollten hashbar sein.
Jetzt, da wir wissen, wie man Counter verwendet, um Counter-Objekte aus beliebigen Python-Iterablen zu erstellen, können wir mit dem Codieren beginnen.
Die in diesem Tutorial verwendeten Beispiele finden Sie in diesem GitHub-Gist.
So erstellen Sie ein Zählerobjekt aus Python-Iterables
Lassen Sie uns einen Python-String erstellen, sagen wir „Renaissance“ und nennen ihn Wort.
>>> word = "renaissance"
Unser Ziel ist es, ein Wörterbuch zu erstellen, in dem jeder Buchstabe in der Wortkette so oft abgebildet wird, wie er in der Kette vorkommt. Ein Ansatz besteht darin, for-Schleifen wie gezeigt zu verwenden:
>>> letter_count = {} >>> for letter in word: ... if letter not in letter_count: ... letter_count(letter) = 0 ... letter_count(letter) += 1 ... >>> letter_count {'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}
Lassen Sie uns analysieren, was das obige Code-Snippet tut:
- Initialisiert letter_count mit einem leeren Python-Wörterbuch.
- Durchläuft die Wortzeichenfolge.
- Überprüft, ob Buchstabe im Wörterbuch letter_count vorhanden ist.
- Wenn Buchstabe nicht vorhanden ist, wird er mit einem Wert von 0 hinzugefügt und anschließend um 1 erhöht.
- Für jedes Vorkommen eines Buchstabens in einem Wort wird der Wert, der dem Buchstaben entspricht, um 1 erhöht.
- Dies wird fortgesetzt, bis wir die gesamte Zeichenfolge durchlaufen.
Wir haben das Wörterbuch letter_count selbst erstellt, indem wir die for-Schleife verwendet haben, um das Zeichenfolgenwort zu durchlaufen.
Lassen Sie uns nun die Counter-Klasse aus dem Sammlungsmodul verwenden. Wir müssen nur die Wortzeichenfolge an Counter() übergeben, um letter_count zu erhalten, ohne Iterables durchlaufen zu müssen.
>>> from collections import Counter >>> letter_count = Counter(word) >>> letter_count Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})
Das Gegenobjekt ist ebenfalls ein Python-Wörterbuch. Wir können die eingebaute Funktion isinstance() verwenden, um dies zu überprüfen:
>>> isinstance(letter_count,dict) True
Wie Sie sehen, gibt isinstance(letter_count, dict) True zurück, was anzeigt, dass das Zählerobjekt letter_count eine Instanz der Python-Klasse dict ist.
Ändern des Zählerobjekts
Bisher haben wir gelernt, Zählerobjekte aus Python-Strings zu erstellen.
Sie können Zählerobjekte auch ändern, indem Sie sie mit Elementen aus einem anderen Iterable aktualisieren oder ein anderes Iterable von ihnen subtrahieren.
Aktualisieren eines Zählers mit Elementen aus einem anderen Iterable
Lassen Sie uns einen anderen String ein other_word initialisieren:
>>> another_word = "effervescence"
Angenommen, wir möchten das Zählerobjekt letter_count mit den Elementen aus der Zeichenfolge other_word aktualisieren.
Wir können die Methode update() auf das Zählerobjekt letter_count anwenden.
>>> letter_count.update(another_word) >>> letter_count Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})
In der Ausgabe sehen wir, dass das Counter-Objekt aktualisiert wurde, um auch die Buchstaben und die Anzahl ihrer Vorkommen aus other_word einzuschließen.
Subtrahieren von Elementen von einem anderen Iterable
Lassen Sie uns nun den Wert von other_word vom Objekt letter_count subtrahieren. Dazu können wir die Methode subtract() verwenden. Die Verwendung von
Subtrahieren wir another_word von letter_count.
>>> letter_count.subtract(another_word) >>> letter_count Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})
Wir sehen, dass die Werte, die den Buchstaben in other_word entsprechen, subtrahiert wurden, aber die hinzugefügten Schlüssel „f“ und „v“ nicht entfernt wurden. Sie werden jetzt einem Wert von 0 zugeordnet.
Hinweis: Hier haben wir other_word, einen Python-String, an den Methodenaufruf subtract() übergeben. Wir können auch ein Python-Zählerobjekt oder ein anderes Iterable übergeben.
Schnittpunkt zwischen zwei Gegenobjekten in Python
Möglicherweise möchten Sie manchmal die Schnittmenge zwischen zwei Python-Zählerobjekten finden, um festzustellen, welche Schlüssel zwischen den beiden gleich sind.
Lassen Sie uns ein Zählerobjekt, sagen wir, letter_count_2, aus der other_word-Zeichenfolge „effervescence“ erstellen.
>>> another_word = "effervescence" >>> letter_count_2 = Counter(another_word) >>> letter_count_2 Counter({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})
Wir können den einfachen &-Operator verwenden, um die Schnittmenge zwischen letter_count und letter_count_2 zu finden.
>>> letter_count & letter_count_2 Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})
Beachten Sie, wie Sie die Schlüssel und die Anzahl der gemeinsamen Vorkommen der beiden Wörter erhalten. Sowohl ‚Renaissance‘ als auch ‚Effervescence‘ enthalten zwei Vorkommen von ‚e‘ und jeweils ein Vorkommen von ‚r‘, ’n‘, ’s‘ und ‚c‘ gemeinsam.
Finden Sie die häufigsten Elemente mit most_common
Eine weitere häufige Operation für das Python-Zählerobjekt besteht darin, die am häufigsten vorkommenden Elemente zu finden.
Um die Top-k der häufigsten Elemente im Zähler abzurufen, können Sie die Methode most_common() für das Zählerobjekt verwenden. Hier rufen wir most_common() auf letter_count auf, um die drei am häufigsten vorkommenden Buchstaben zu finden.
>>> letter_count.most_common(3) (('e', 2), ('n', 2), ('a', 2))
Wir sehen, dass die Buchstaben „e“, „n“ und „a“ zweimal im Wort „Renaissance“ vorkommen.
Dies ist besonders hilfreich, wenn der Zähler viele Einträge enthält und Sie daran interessiert sind, mit den gängigsten Schlüsseln zu arbeiten.
Abschluss
Hier ist ein kurzer Überblick über das, was wir im Tutorial gelernt haben:
- Die Counter-Klasse aus dem integrierten Sammlungsmodul von Python kann verwendet werden, um ein Wörterbuch mit Zählwerten aller Elemente in jedem Iterable zu erhalten. Sie sollten sicherstellen, dass alle Elemente in der Iterable gehashbar sind.
- Sie können den Inhalt eines Python-Zählerobjekts mit dem Inhalt eines anderen Zählerobjekts oder eines anderen iterierbaren Objekts aktualisieren, indem Sie die update()-Methode mit der folgenden Syntax verwenden: counter1.update(counter2). Beachten Sie, dass Sie anstelle von counter2 jedes Iterable verwenden können.
- Wenn Sie den Inhalt eines der Iterables aus dem aktualisierten Zähler entfernen möchten, können Sie die Methode subtract() verwenden: counter1.subtract(counter2).
- Um die gemeinsamen Elemente zwischen zwei Zählerobjekten zu finden, können Sie den &-Operator verwenden. Bei zwei Zählern Zähler1 und Zähler2 geben Zähler1 & Zähler2 die Schnittmenge dieser beiden Zählerobjekte zurück.
- Um die k häufigsten Elemente in einem Zähler zu erhalten, können Sie die Methode most_common() verwenden. counter.most_common(k) liefert die k häufigsten Items und die jeweiligen Counts.
Als Nächstes erfahren Sie, wie Sie default dict, eine weitere Klasse im Sammlungsmodul, verwenden. Sie können default dict anstelle eines regulären Python-Wörterbuchs verwenden, um fehlende Schlüssel zu behandeln.