Ebből az oktatóanyagból megtudhatja, hogyan kell használni a Python gyűjtőmoduljából származó számlálóobjektumot.
Ha hosszú sorozatokkal dolgozik Pythonban, például Python-listákkal vagy karakterláncokkal, előfordulhat, hogy el kell tárolnia a sorozatban megjelenő elemeket és azok megjelenési számát.
A Python szótár megfelelő beépített adatstruktúra az ilyen alkalmazásokhoz. A Python Counter osztálya azonban a gyűjtemények modulból leegyszerűsítheti ezt – egy számláló létrehozásával –, amely egy szótár az elemekről és azok számáról a sorozatban.
A következő néhány percben a következőket tanulja meg:
- Használja a Python számlálóobjektumát
- Hozzon létre egy Python-szótárt az elemek számértékeinek iterálható formában történő tárolásához
- Írja át a szótárt Python-számlálóval, egyszerűsített szintaxissal
- Olyan műveletek végrehajtása, mint az elemek frissítése és kivonása, metszéspont keresése két számlálóobjektum között
- Szerezze be a számláló leggyakrabban előforduló tételeit a most_common() metódussal
Kezdjük el!
Python Collections modul és számlálóosztály
Gyakran használ egy Python szótárt az elemek és azok számának iterálható formában történő tárolására. Az elemek és a szám kulcsként, illetve értékként tárolódnak.
Mivel a Counter osztály a Python beépített gyűjteménymoduljának része, így importálhatja a Python-szkriptbe:
from collections import Counter
A Counter osztály importálása után az ábrán látható módon létrehozhat egy számláló objektumot:
<counter_object> = Counter(iterable)
Itt:
- iterable bármely érvényes Python iterálható, például Python-lista, karakterlánc vagy sor.
- Az iterálható elemnek kivonhatónak kell lennie.
Most, hogy tudjuk, hogyan kell a Counter használatával számlálóobjektumokat létrehozni bármely Python iterálhatóból, kezdjük el a kódolást.
Az oktatóanyagban használt példák megtalálhatók ebben a GitHub-összefoglalóban.
Hogyan lehet számlálóobjektumot létrehozni a Python Iterables alkalmazásból
Hozzunk létre egy Python-karakterláncot, mondjuk „reneszánsz”, és nevezzük szónak.
>>> word = "renaissance"
Célunk egy olyan szótár létrehozása, amelyben a karakterlánc minden betűjét leképezzük a karakterláncban való előfordulások számára. Az egyik megközelítés a hurkok használata, ahogy az ábrán látható:
>>> 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}
Elemezzük, mit csinál a fenti kódrészlet:
- A letter_count inicializálása egy üres Python-szótárban.
- Végigkarikázik a karakterláncot.
- Ellenőrzi, hogy a betű szerepel-e a letter_count szótárban.
- Ha nincs betű, akkor 0 értékkel adja hozzá, majd 1-gyel növeli az értéket.
- A szóban szereplő betű minden előfordulásakor a betűnek megfelelő érték 1-gyel növekszik.
- Ez mindaddig folytatódik, amíg végig nem körözzük a teljes karakterláncot.
A letter_count szótárt – saját kezűleg – a for loop használatával hoztuk létre a karakterláncszó között.
Most használjuk a Counter osztályt a gyűjtemények modulból. Csak át kell adnunk a stringet a Counter()-nek, hogy megkapjuk a letter_count értéket anélkül, hogy az iterables ciklusokon át kellene lépni.
>>> 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})
A számlálóobjektum egyben Python szótár is. Ezt a beépített isinstance() függvény segítségével ellenőrizhetjük:
>>> isinstance(letter_count,dict) True
Mint látható, az isinstance(letter_count, dict) True értéket ad vissza, jelezve, hogy a letter_count számlálóobjektum a Python dict osztály egy példánya.
A számlálóobjektum módosítása
Eddig megtanultunk ellenobjektumokat létrehozni Python karakterláncokból.
A számláló objektumokat úgy is módosíthatja, hogy frissíti őket egy másik iterálható elemekkel, vagy kivon belőlük egy másik iterálhatóságot.
Számláló frissítése egy másik iterálható elemekkel
Inicializáljunk egy másik karakterláncot other_word:
>>> another_word = "effervescence"
Tegyük fel, hogy frissíteni szeretnénk a letter_count számláló objektumot a másik_szó karakterlánc elemeivel.
Használhatjuk az update() metódust a letter_count számlálóobjektumnál.
>>> 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})
A kimenetben azt látjuk, hogy a számlálóobjektum frissítve lett, és tartalmazza a másik_szó betűit és előfordulásuk számát is.
Elemek kivonása egy másik iterálhatóból
Most vonjuk ki a másik_szó értékét a letter_count objektumból. Ehhez használhatjuk a subtract() metódust. A
Vonjuk ki a másik_szót a betűk_számából.
>>> 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})
Látjuk, hogy a másik_szó betűinek megfelelő értékeket kivontuk, de a hozzáadott ‘f’ és ‘v’ kulcsokat nem távolította el. Most 0 értékre képezik le őket.
Megjegyzés: Itt egy másik_szót, egy Python karakterláncot adtunk át a subtract() metódushíváshoz. Átadhatunk Python számlálóobjektumot vagy más iterálható objektumot is.
Két ellentétes objektum metszéspontja a Pythonban
Néha érdemes megkeresni a metszéspontot két Python-számlálóobjektum között, hogy azonosítsa, mely kulcsok közösek a kettő között.
Hozzunk létre egy számlálóobjektumot, mondjuk, letter_count_2, az other_word ‘pezsgés’ karakterláncból.
>>> 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})
Az egyszerű & operátor segítségével megtalálhatjuk a metszéspontot a betű_száma és a betű_száma_2 között.
>>> letter_count & letter_count_2 Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})
Figyelje meg, hogyan kapja meg a kulcsokat és a két szó közös előfordulásának számát. A „reneszánsz” és a „pezsgés” két „e” és egy „r”, „n”, „s” és „c” közös előfordulását tartalmazza.
Keresse meg a leggyakrabban használt tételeket a most_common használatával
A Python számlálóobjektum másik gyakori művelete a leggyakrabban előforduló elemek megkeresése.
Ha a számlálóban a leggyakrabban előforduló k elemet szeretné megkapni, használja a most_common() metódust a számláló objektumon. Itt meghívjuk a most_common() függvényt a letter_count függvényben, hogy megtaláljuk a három leggyakrabban előforduló betűt.
>>> letter_count.most_common(3) [('e', 2), ('n', 2), ('a', 2)]
Látjuk, hogy az „e”, „n” és „a” betűk kétszer fordulnak elő a „renaissance” szóban.
Ez különösen akkor hasznos, ha a számláló nagyszámú bejegyzést tartalmaz, és Ön a leggyakoribb gombokkal szeretne dolgozni.
Következtetés
Íme egy gyors áttekintés az oktatóprogramban tanultakról:
- A Python beépített gyűjteménymoduljának Counter osztálya használható bármely iterálható elem számértékeinek szótárához. Győződjön meg arról, hogy az iterálható elem összes eleme kivonatolható.
- Egy Python-számlálóobjektum tartalmát frissítheti egy másik számlálóobjektum tartalmával vagy bármely más iterálható elemmel az update() metódus használatával a következő szintaxissal: counter1.update(counter2). Vegye figyelembe, hogy a counter2 helyett bármilyen iterálhatót használhat.
- Ha a frissített számlálóból el akarja távolítani valamelyik iterable tartalmát, használhatja a subtract() metódust: counter1.subtract(counter2).
- Két számlálóobjektum közötti közös elemek megtalálásához használhatja a & operátort. Ha két számláló 1 és számláló 2, akkor a számláló1 és a számláló 2 e két számláló objektum metszéspontját adja vissza.
- Ha a k leggyakoribb elemet szeretné megkapni egy számlálóban, használhatja a most_common() metódust. A counter.most_common(k) megadja a k leggyakoribb elemet és a megfelelő számokat.
Ezután tanulja meg az alapértelmezett dict használatát, amely egy másik osztály a gyűjtemények modulban. A hiányzó kulcsok kezelésére használhatja az alapértelmezett dict-et a szokásos Python-szótár helyett.