Cum să utilizați contorul Python din modulul Colecții

În acest tutorial, veți învăța cum să utilizați obiectul contor din modulul de colecție al lui Python.

Când lucrați cu secvențe lungi în Python, de exemplu, liste sau șiruri de caractere Python, uneori poate fi necesar să stocați elementele care apar în secvență și de câte ori apar.

Un dicționar Python este o structură de date încorporată adecvată pentru astfel de aplicații. Cu toate acestea, clasa Python Counter din modulul de colecții poate simplifica acest lucru – prin construirea unui contor – care este un dicționar de articole și numărarea lor în secvență.

În următoarele câteva minute, veți învăța următoarele:

  • Utilizați obiectul contor al lui Python
  • Creați un dicționar Python pentru a stoca valorile de numărare ale elementelor într-un iterabil
  • Rescrieți dicționarul folosind contorul lui Python cu o sintaxă simplificată
  • Efectuați operațiuni precum actualizarea și scăderea elementelor, găsirea intersecției dintre două obiecte contor
  • Obțineți cele mai frecvente articole din contor folosind metoda most_common().

Să începem!

Modulul Python Collections și Counter Class

Veți folosi adesea un dicționar Python pentru a stoca articolele și numărul lor într-un iterabil. Elementele și numărul sunt stocate ca chei și, respectiv, valori.

Deoarece clasa Counter face parte din modulul de colecții încorporat al lui Python, o puteți importa în scriptul dvs. Python astfel:

from collections import Counter

După importarea clasei Counter așa cum s-a menționat, puteți instanția un obiect contor așa cum se arată:

<counter_object> = Counter(iterable)

Aici:

  • iterabil este orice iterabil Python valid, cum ar fi lista Python, șir sau tuplu.
  • Elementele din iterabil ar trebui să fie hashable.
  10 platforme de contabilizare a carbonului pentru a vă reduce amprenta de carbon

Acum că știm cum să folosim Counter pentru a crea obiecte contor din orice iterabil Python, să începem codificarea.

Exemplele folosite în acest tutorial pot fi găsite în acest articol GitHub.

Cum se creează un obiect contrar din Python Iterables

Să creăm un șir Python, să spunem „renaștere” și să-i spunem cuvânt.

>>> word = "renaissance"

Scopul nostru este să creăm un dicționar în care fiecare literă din șirul de cuvinte este mapată la numărul de ori care apare în șir. O abordare este folosirea buclelor for așa cum se arată:

>>> 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}

Să analizăm ce face fragmentul de cod de mai sus:

  • Inițializează letter_count într-un dicționar Python gol.
  • Parcurge șirul de cuvinte.
  • Verifică dacă scrisoarea este prezentă în dicționarul letter_count.
  • Dacă litera nu este prezentă, o adaugă cu o valoare de 0 și ulterior crește valoarea cu 1.
  • Pentru fiecare apariție a literei în cuvânt, valoarea toletterului corespunzătoare este incrementată cu 1.
  • Acest lucru continuă până când trecem prin întregul șir.

Am construit dicționarul letter_count — pe cont propriu — folosind for loop pentru a parcurge cuvântul șir.

Acum să folosim clasa Counter din modulul de colecții. Trebuie doar să transmitem șirul de cuvinte la Counter() pentru a obține letter_count fără a fi nevoie să facem bucla prin iterabile.

>>> 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})

Obiectul counter este, de asemenea, un dicționar Python. Putem folosi funcția încorporată isinstance() pentru a verifica acest lucru:

>>> isinstance(letter_count,dict)
True

După cum s-a văzut, isinstance(letter_count, dict) returnează True indicând faptul că obiectul counter letter_count este o instanță a clasei Python dict.

  Cele mai bune 8 aplicații pentru a-ți organiza dulapul și a planifica ținutele

Modificarea obiectului Counter

Până acum, am învățat să creăm obiecte contor din șiruri Python.

De asemenea, puteți modifica obiectele contor actualizându-le cu elemente dintr-un alt iterabil sau scăzând un alt iterabil din ele.

Actualizarea unui contor cu elemente dintr-un alt iterabil

Să inițializam un alt șir another_word:

>>> another_word = "effervescence"

Să presupunem că am dori să actualizăm obiectul letter_count counter cu elementele din șirul another_word.

Putem folosi metoda update() pe obiectul counter 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})

În rezultat, vedem că obiectul contor a fost actualizat pentru a include, de asemenea, literele și numărul lor de apariții de la another_word.

Scăderea elementelor dintr-un alt iterabil

Acum să scădem valoarea another_word din obiectul letter_count. Pentru a face acest lucru, putem folosi metoda subtract(). Folosind .subtract() scade valorile corespunzătoare elementelor din din .

Să scădem another_word din 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})

Vedem că valorile corespunzătoare literelor din alt_cuvânt au fost scăzute, dar cheile adăugate „f” și „v” nu sunt eliminate. Acum se mapează la o valoare de 0.

Notă: Aici, am trecut în another_word, un șir Python, la apelul metodei subtract(). De asemenea, putem trece un obiect de contor Python sau un alt iterabil.

Intersecția dintre două obiecte contrare în Python

Poate doriți uneori să găsiți intersecția dintre două obiecte de contor Python pentru a identifica ce chei sunt comune între cele două.

Să creăm un obiect contor, de exemplu, letter_count_2, din șirul another_word „efervescență”.

>>> 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})

Putem folosi operatorul simplu & pentru a găsi intersecția dintre letter_count și letter_count_2.

>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

Observați cum obțineți cheile și numărul de apariții comune celor două cuvinte. Atât „renașterea” cât și „efervescența” conțin două apariții ale lui „e” și câte o apariție de „r”, „n”, „s” și „c” în comun.

  Cum să sortați după dată în Microsoft Excel

Găsiți cele mai frecvente articole folosind most_common

O altă operațiune comună pe obiectul contor Python este găsirea elementelor care apar cel mai frecvent.

Pentru a obține primele k cele mai comune articole din contor, puteți utiliza metoda most_common() pe obiectul counter. Aici, apelăm most_common() pe letter_count pentru a găsi cele trei litere care apar cel mai frecvent.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

Vedem că literele „e”, „n” și „a” apar de două ori în cuvântul „renaștere”.

Acest lucru este util în special dacă contorul conține un număr mare de intrări și sunteți interesat să lucrați cu cele mai comune taste.

Concluzie

Iată o scurtă trecere în revistă a ceea ce am învățat în tutorial:

  • Clasa Counter din modulul de colecții încorporat al lui Python poate fi folosită pentru a obține un dicționar de valori de numărare a tuturor elementelor din orice iterabil. Ar trebui să vă asigurați că toate elementele din iterabil sunt hashable.
  • Puteți actualiza conținutul unui obiect contor Python cu conținut dintr-un alt obiect contor sau orice alt obiect iterabil folosind metoda update() cu sintaxa: counter1.update(counter2). Rețineți că puteți utiliza orice iterabil în loc de counter2.
  • Dacă doriți să eliminați conținutul unuia dintre iterabile din contorul actualizat, puteți utiliza metoda subtract(): counter1.subtract(counter2).
  • Pentru a găsi elementele comune între două obiecte contor, puteți utiliza operatorul &. Având în vedere două contoare counter1 și counter2, counter1 & counter2 returnează intersecția acestor două obiecte contor.
  • Pentru a obține cele mai frecvente k articole dintr-un contor, puteți folosi metoda most_common(). counter.most_common(k) oferă cele mai frecvente k articole și numărul respectiv.

Apoi, aflați cum să utilizați dict implicit, o altă clasă din modulul de colecții. Puteți folosi dictul implicit în loc de un dicționar Python obișnuit pentru a gestiona cheile lipsă.