V tomto tutoriálu se naučíte, jak používat objekt čítače z modulu kolekce Pythonu.
Když v Pythonu pracujete s dlouhými sekvencemi, řekněme s Pythonovými seznamy nebo řetězci, možná budete někdy potřebovat uložit položky, které se v sekvenci objeví, a kolikrát se objeví.
Pythonský slovník je vhodnou vestavěnou datovou strukturou pro takové aplikace. Třída Counter v Pythonu z modulu collections to však může zjednodušit – vytvořením čítače – což je slovník položek a jejich počtu v sekvenci.
Během několika následujících minut se naučíte následující:
- Použijte objekt čítače Pythonu
- Vytvořte pythonovský slovník pro ukládání hodnot počtu položek v iterovatelné
- Přepište slovník pomocí čítače Pythonu se zjednodušenou syntaxí
- Provádějte operace, jako je aktualizace a odečítání prvků, nalezení průsečíku mezi dvěma objekty čítače
- Získejte nejčastější položky v počítadle pomocí metody most_common().
Začněme!
Table of Contents
Modul Python Collections a Counter Class
K ukládání položek a jejich počtu v iterovatelném slovníku budete často používat slovník Pythonu. Položky a počet jsou uloženy jako klíče a hodnoty.
Protože je třída Counter součástí vestavěného modulu kolekcí Pythonu, můžete ji importovat do skriptu Python takto:
from collections import Counter
Po importu třídy Counter, jak je uvedeno, můžete vytvořit instanci objektu čítače, jak je znázorněno:
<counter_object> = Counter(iterable)
Tady:
- iterable je jakýkoli platný iterovatelný Python, jako je seznam Python, řetězec nebo n-tice.
- Položky v iterovatelném by měly být hašovatelné.
Nyní, když víme, jak použít Counter k vytvoření objektů čítače z libovolného iterovatelného Pythonu, začněme kódovat.
Příklady použité v tomto tutoriálu naleznete v tomto GitHubu.
Jak vytvořit objekt Counter z Python Iterables
Vytvořme řetězec Python, řekněme, ‚renaissance‘ a nazvěme jej slovo.
>>> word = "renaissance"
Naším cílem je vytvořit slovník, kde je každé písmeno v řetězci slov mapováno na počet výskytů v řetězci. Jedním přístupem je použití pro smyčky, jak je znázorněno:
>>> 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}
Pojďme analyzovat, co dělá výše uvedený fragment kódu:
- Inicializuje letter_count do prázdného slovníku Pythonu.
- Prochází řetězec slov.
- Zkontroluje, zda je písmeno přítomno ve slovníku letter_count.
- Pokud písmeno není přítomno, přidá jej s hodnotou 0 a následně hodnotu zvýší o 1.
- Pro každý výskyt písmene ve slově se hodnota odpovídající toletteru zvýší o 1.
- Takto to pokračuje, dokud nepropleteme celý řetězec.
Vytvořili jsme slovník počtu písmen – sami – pomocí smyčky for pro procházení řetězcem slova.
Nyní použijeme třídu Counter z modulu collections. Potřebujeme pouze předat řetězec slova do Counter(), abychom získali letter_count, aniž bychom museli procházet iterables.
>>> 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})
Objekt čítače je také slovník Pythonu. K ověření můžeme použít vestavěnou funkci isinstance():
>>> isinstance(letter_count,dict) True
Jak je vidět, isinstance(počet_písmen, dict) vrací True, což znamená, že objekt čítače počet_písmen je instancí třídy Python dict.
Úprava objektu čítače
Zatím jsme se naučili vytvářet objekty čítačů z řetězců Pythonu.
Objekty čítače můžete také upravit tak, že je aktualizujete prvky z jiné iterovatelné nebo od nich odečtete jinou iterovatelnou.
Aktualizace počítadla prvky z jiného iterovatelného
Inicializujeme další řetězec other_word:
>>> another_word = "effervescence"
Předpokládejme, že bychom chtěli aktualizovat objekt počítadla letter_count položkami z řetězce other_word.
Můžeme použít metodu update() na objektu čítače letter_count.
>>> 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})
Ve výstupu vidíme, že objekt čítače byl aktualizován tak, aby zahrnoval také písmena a jejich počet výskytů z jiného_slova.
Odečítání prvků z jiného iterovatelného
Nyní odečteme hodnotu other_word od objektu letter_count. K tomu můžeme použít metodu subtract(). Pomocí
Odečteme další_slovo od počtu_písmen.
>>> 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})
Vidíme, že hodnoty odpovídající písmenům v other_word byly odečteny, ale přidané klíče ‚f‘ a ‚v‘ nebyly odstraněny. Nyní se mapují na hodnotu 0.
Poznámka: Zde jsme předali další_slovo, řetězec Pythonu, do volání metody subtract(). Můžeme také předat objekt čítače Pythonu nebo jiný iterovatelný objekt.
Průnik mezi dvěma objekty čítače v Pythonu
Někdy možná budete chtít najít průsečík mezi dvěma objekty čítače Pythonu, abyste zjistili, které klíče jsou mezi nimi společné.
Vytvořme objekt čítače, řekněme, počet_2, z řetězce jiného slova ‚šumění‘.
>>> 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})
Můžeme použít operátor simple & k nalezení průsečíku mezi letter_count a letter_count_2.
>>> letter_count & letter_count_2 Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})
Všimněte si, jak získáte klíče a počet společných výskytů těchto dvou slov. Jak ‚renaissance‘, tak ‚šumění‘ obsahují dva výskyty ‚e‘ a jeden společný výskyt ‚r‘, ‚n‘, ‚s‘ a ‚c‘.
Najděte nejčastější položky pomocí most_common
Další běžnou operací na objektu čítače Pythonu je nalezení nejčastěji se vyskytujících položek.
Chcete-li získat prvních k nejběžnějších položek v čítači, můžete použít metodu most_common() na objektu čítače. Zde zavoláme most_common() na letter_count, abychom našli tři nejčastěji se vyskytující písmena.
>>> letter_count.most_common(3) [('e', 2), ('n', 2), ('a', 2)]
Vidíme, že písmena „e“, „n“ a „a“ se ve slově „renesance“ vyskytují dvakrát.
To je zvláště užitečné, pokud počítadlo obsahuje velké množství záznamů a máte zájem pracovat s nejběžnějšími klíči.
Závěr
Zde je rychlý přehled toho, co jsme se naučili v tutoriálu:
- Třídu Counter z vestavěného modulu kolekcí Pythonu lze použít k získání slovníku hodnot počtu všech položek v libovolné iteraci. Měli byste se ujistit, že všechny položky v iterovatelné jsou hašovatelné.
- Obsah jednoho objektu čítače Pythonu můžete aktualizovat obsahem jiného objektu čítače nebo jakéhokoli jiného iterovatelného pomocí metody update() se syntaxí: counter1.update(counter2). Všimněte si, že místo čítače2 můžete použít libovolnou iterovatelnou.
- Pokud chcete odstranit obsah jedné z iterovatelných položek z aktualizovaného čítače, můžete použít metodu subtract(): counter1.subtract(counter2).
- Chcete-li najít společné prvky mezi dvěma objekty čítače, můžete použít operátor &. Jsou-li dány dva čítače čítač1 a čítač2, čítač1 a čítač2 vrací průnik těchto dvou objektů čítače.
- Chcete-li získat k nejčastějších položek v počítadle, můžete použít metodu most_common(). counter.most_common(k) udává k nejběžnějších položek a příslušné počty.
Dále se naučte, jak používat výchozí dict, další třídu v modulu kolekcí. Ke zpracování chybějících klíčů můžete použít výchozí dict místo běžného slovníku Pythonu.