Sådan bruger du Pythons tæller fra samlingsmodulet

I denne vejledning lærer du, hvordan du bruger tællerobjektet fra Pythons samlingsmodul.

Når du arbejder med lange sekvenser i Python, f.eks. Python-lister eller strenge, kan det være nødvendigt at gemme de elementer, der vises i sekvensen, og det antal gange, de vises.

En Python-ordbog er en passende indbygget datastruktur til sådanne applikationer. Pythons tællerklasse fra samlingsmodulet kan dog forenkle dette – ved at konstruere en tæller – som er en ordbog over genstande og deres antal i sekvensen.

I løbet af de næste par minutter lærer du følgende:

  • Brug Pythons modobjekt
  • Opret en Python-ordbog for at gemme tælleværdier for elementer i en iterabel
  • Omskriv ordbogen ved hjælp af Pythons tæller med en forenklet syntaks
  • Udfør operationer såsom at opdatere og trække elementer fra, finde skæringspunktet mellem to tællerobjekter
  • Få de mest hyppige elementer i tælleren ved at bruge most_common() metoden

Lad os komme igang!

Python Collections modul og tællerklasse

Du vil ofte bruge en Python-ordbog til at gemme emnerne og deres antal i en iterabel. Varerne og optællingen gemmes som henholdsvis nøgler og værdier.

Da Counter-klassen er en del af Pythons indbyggede samlingsmodul, kan du importere den i dit Python-script sådan:

from collections import Counter

Efter at have importeret Counter-klassen som nævnt, kan du instansiere et tællerobjekt som vist:

<counter_object> = Counter(iterable)

Her:

  • iterable er enhver gyldig Python iterable, såsom Python-liste, streng eller tuple.
  • Elementerne i iterablen skal være hashbare.

Nu hvor vi ved, hvordan man bruger tæller til at skabe tællerobjekter fra enhver iterable Python, lad os begynde at kode.

  Alle internetudbydere bør løfte datalofter på grund af Coronavirus

Eksemplerne brugt i denne tutorial kan findes i denne GitHub-gist.

Sådan opretter du et modobjekt fra Python Iterables

Lad os skabe en Python-streng, sige ‘renæssance’ og kalde det ord.

>>> word = "renaissance"

Vores mål er at lave en ordbog, hvor hvert bogstav i ordstrengen er afbildet til det antal gange, det forekommer i strengen. En tilgang er at bruge til sløjfer som vist:

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

Lad os analysere, hvad ovenstående kodestykke gør:

  • Initialiserer letter_count til en tom Python-ordbog.
  • Sløjfer gennem ordstrengen.
  • Kontrollerer, om bogstav er til stede i bogstavtællerordbogen.
  • Hvis bogstavet ikke er til stede, tilføjer det det med en værdi på 0 og øger efterfølgende værdien med 1.
  • For hver forekomst af bogstav i ord øges værdien, der svarer til bogstavet, med 1.
  • Dette fortsætter, indtil vi går gennem hele strengen.

Vi konstruerede bogstaver_antal-ordbogen – på egen hånd – ved at bruge for loop til at gå gennem strengordet.

Lad os nu bruge Counter-klassen fra samlingsmodulet. Vi behøver kun at sende ordstrengen til Counter() for at få bogstavtæller uden at skulle gå gennem 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})

Tællerobjektet er også en Python-ordbog. Vi kan bruge den indbyggede isinstance() funktion til at bekræfte dette:

>>> isinstance(letter_count,dict)
True

Som det ses returnerer isinstance(bogstav_antal, dict) True, hvilket indikerer, at tællerobjektet letter_count er en forekomst af Python dict-klassen.

Ændring af modobjektet

Indtil videre har vi lært at skabe modobjekter fra Python-strenge.

Du kan også ændre tællerobjekter ved at opdatere dem med elementer fra en anden iterabel eller trække en anden iterabel fra dem.

  Stream Kodi på Googles dongle

Opdatering af en tæller med elementer fra Another Iterable

Lad os initialisere en anden streng another_word:

>>> another_word = "effervescence"

Antag, at vi gerne vil opdatere letter_count-tællerobjektet med elementerne fra en anden_ord-streng.

Vi kan bruge update()-metoden på tællerobjektet 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})

I outputtet ser vi, at tællerobjektet er blevet opdateret til også at inkludere bogstaverne og deres antal forekomster fra et andet_ord.

Træk elementer fra en anden iterabel

Lad os nu trække værdien af ​​et andet_ord fra objektet letter_count. For at gøre det kan vi bruge subtract() metoden. Ved at bruge .subtract() trækkes værdierne svarende til elementer i fra .

Lad os trække endnu et_ord fra bogstavtæller.

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

Vi ser, at de værdier, der svarer til bogstaverne i et andet_ord, er blevet trukket fra, men de tilføjede nøgler ‘f’ og ‘v’ er ikke fjernet. De kortlægges nu til en værdi på 0.

Bemærk: Her har vi sendt et andet_ord, en Python-streng, til subtract()-metodekaldet. Vi kan også sende et Python-tællerobjekt eller et andet iterabelt ind.

Skæring mellem to modobjekter i Python

Du vil måske nogle gange finde skæringspunktet mellem to Python-tællerobjekter for at identificere, hvilke nøgler der er fælles mellem de to.

Lad os skabe et tællerobjekt, f.eks. bogstav_antal_2, ud fra strengen med et andet_ord ‘opbrusning’.

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

Vi kan bruge simple & operatoren til at finde skæringspunktet mellem bogstavtæller og bogstavantal_2.

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

Læg mærke til, hvordan du får nøglerne og antallet af forekomster, der er fælles for de to ord. Både ‘renæssance’ og ‘opbrusning’ indeholder to forekomster af ‘e’ og en forekomst hver af ‘r’, ‘n’, ‘s’ og ‘c’ til fælles.

  Sådan beskytter du dele af et Word-dokument mod redigering

Find de mest hyppige elementer ved hjælp af most_common

En anden almindelig operation på Python-tællerobjektet er at finde de oftest forekommende elementer.

For at få top k mest almindelige elementer i tælleren, kan du bruge most_common() metoden på tællerobjektet. Her kalder vi most_common() på letter_count for at finde de tre hyppigst forekommende bogstaver.

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

Vi ser, at bogstaverne ‘e’, ​​’n’ og ‘a’ forekommer to gange i ordet ‘renæssance’.

Dette er især nyttigt, hvis tælleren indeholder et stort antal poster, og du er interesseret i at arbejde med de mest almindelige nøgler.

Konklusion

Her er en hurtig gennemgang af, hvad vi har lært i selvstudiet:

  • Counter-klassen fra Pythons indbyggede samlingsmodul kan bruges til at få en ordbog over tælleværdier for alle elementer i enhver iterable. Du bør sikre dig, at alle elementerne i iterablen er hashbare.
  • Du kan opdatere indholdet af et Python-tællerobjekt med indhold fra et andet tællerobjekt eller et hvilket som helst andet iterabelt ved hjælp af update()-metoden med syntaksen: counter1.update(counter2). Bemærk, at du kan bruge enhver iterabel i stedet for tæller2.
  • Hvis du vil fjerne indholdet af en af ​​de iterables fra den opdaterede tæller, kan du bruge subtract() metoden: counter1.subtract(counter2).
  • For at finde de fælles elementer mellem to tællerobjekter kan du bruge &-operatoren. Givet to tællere tæller1 og tæller2, returnerer tæller1 og tæller2 skæringspunktet mellem disse to tællerobjekter.
  • For at få de k hyppigste elementer i en tæller, kan du bruge most_common() metoden. counter.most_common(k) giver de k mest almindelige elementer og de respektive tæller.

Lær derefter, hvordan du bruger standard dict, en anden klasse i samlingsmodulet. Du kan bruge standard dict i stedet for en almindelig Python-ordbog til at håndtere manglende nøgler.