Πώς να χρησιμοποιήσετε τον μετρητή Python από τη μονάδα συλλογών

Σε αυτό το σεμινάριο, θα μάθετε πώς να χρησιμοποιείτε το αντικείμενο μετρητή από τη μονάδα συλλογής της Python.

Όταν εργάζεστε με μεγάλες ακολουθίες στην Python, για παράδειγμα, λίστες ή συμβολοσειρές Python, μερικές φορές μπορεί να χρειαστεί να αποθηκεύσετε τα στοιχεία που εμφανίζονται στην ακολουθία και τον αριθμό των φορών που εμφανίζονται.

Ένα λεξικό Python είναι μια κατάλληλη ενσωματωμένη δομή δεδομένων για τέτοιες εφαρμογές. Ωστόσο, η κλάση Counter της Python από τη λειτουργική μονάδα συλλογών μπορεί να το απλοποιήσει – κατασκευάζοντας έναν μετρητή – ο οποίος είναι ένα λεξικό στοιχείων και η μέτρησή τους στην ακολουθία.

Μέσα στα επόμενα λεπτά, θα μάθετε τα εξής:

  • Χρησιμοποιήστε το αντικείμενο μετρητή Python
  • Δημιουργήστε ένα λεξικό Python για να αποθηκεύσετε τις τιμές καταμέτρησης των στοιχείων σε ένα επαναληπτικό
  • Ξαναγράψτε το λεξικό χρησιμοποιώντας τον μετρητή Python με μια απλοποιημένη σύνταξη
  • Εκτελέστε λειτουργίες όπως ενημέρωση και αφαίρεση στοιχείων, εύρεση τομής μεταξύ δύο αντικειμένων μετρητή
  • Λάβετε τα πιο συχνά στοιχεία στον μετρητή χρησιμοποιώντας τη μέθοδο most_common().

Ας αρχίσουμε!

Python Collections Module και Counter Class

Θα χρησιμοποιείτε συχνά ένα λεξικό Python για να αποθηκεύετε τα στοιχεία και τον αριθμό τους σε ένα επαναληπτικό. Τα στοιχεία και η καταμέτρηση αποθηκεύονται ως κλειδιά και τιμές, αντίστοιχα.

Καθώς η κλάση Counter είναι μέρος της ενσωματωμένης ενότητας συλλογών της Python, μπορείτε να την εισαγάγετε στο σενάριο Python σας ως εξής:

from collections import Counter

Μετά την εισαγωγή της κλάσης Counter όπως αναφέρθηκε, μπορείτε να δημιουργήσετε ένα αντικείμενο μετρητή όπως φαίνεται:

<counter_object> = Counter(iterable)

Εδώ:

  • iterable είναι οποιοδήποτε έγκυρο επαναληπτικό Python, όπως λίστα Python, συμβολοσειρά ή πλειάδα.
  • Τα στοιχεία στο iterable θα πρέπει να κατακερματίζονται.
  Πώς να διώξετε κάποιον από το Netflix

Τώρα που ξέρουμε πώς να χρησιμοποιούμε το Counter για τη δημιουργία αντικειμένων μετρητή από οποιοδήποτε επαναληπτικό Python, ας ξεκινήσουμε την κωδικοποίηση.

Τα παραδείγματα που χρησιμοποιούνται σε αυτό το σεμινάριο μπορούν να βρεθούν σε αυτήν την ουσία του GitHub.

Πώς να δημιουργήσετε ένα αντικείμενο μετρητή από Python Iterables

Ας δημιουργήσουμε μια συμβολοσειρά Python, ας πούμε, «αναγέννηση» και ας την ονομάσουμε λέξη.

>>> word = "renaissance"

Στόχος μας είναι να δημιουργήσουμε ένα λεξικό όπου κάθε γράμμα στη συμβολοσειρά λέξης αντιστοιχίζεται με τον αριθμό των φορών που εμφανίζεται στη συμβολοσειρά. Μια προσέγγιση είναι να χρησιμοποιήσετε για βρόχους όπως φαίνεται:

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

Ας αναλύσουμε τι κάνει το παραπάνω απόσπασμα κώδικα:

  • Αρχικοποιεί το letter_count σε ένα κενό λεξικό Python.
  • Κυκλοφορεί μέσα από τη συμβολοσειρά λέξης.
  • Ελέγχει εάν υπάρχει το γράμμα στο λεξικό letter_count.
  • Εάν δεν υπάρχει γράμμα, το προσθέτει με τιμή 0 και στη συνέχεια αυξάνει την τιμή κατά 1.
  • Για κάθε εμφάνιση γράμματος στο word, η τιμή του αντίστοιχου toletter αυξάνεται κατά 1.
  • Αυτό συνεχίζεται μέχρι να κάνουμε βρόχο σε ολόκληρη τη συμβολοσειρά.

Κατασκευάσαμε το λεξικό letter_count—μόνοι μας—χρησιμοποιώντας το for loop για να περάσουμε τη λέξη συμβολοσειράς.

Τώρα ας χρησιμοποιήσουμε την κλάση Counter από την ενότητα συλλογών. Χρειάζεται μόνο να περάσουμε τη συμβολοσειρά λέξης στην Counter() για να πάρουμε letter_count χωρίς να χρειάζεται να κάνουμε βρόχο μέσω επαναληπτικών.

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

Το αντικείμενο μετρητή είναι επίσης ένα λεξικό Python. Μπορούμε να χρησιμοποιήσουμε την ενσωματωμένη συνάρτηση ininstance() για να το επαληθεύσουμε:

>>> isinstance(letter_count,dict)
True

Όπως φαίνεται, το ininstance(letter_count, dict) επιστρέφει True υποδεικνύοντας ότι το αντικείμενο μετρητή letter_count είναι μια παρουσία της κλάσης Python dict.

Τροποποίηση του μετρητή αντικειμένου

Μέχρι στιγμής, μάθαμε να δημιουργούμε μετρητές από συμβολοσειρές Python.

  10 καλύτερα εργαλεία παρακολούθησης σφαλμάτων για σύγχρονες ομάδες προγραμματιστών

Μπορείτε επίσης να τροποποιήσετε αντικείμενα μετρητή ενημερώνοντάς τα με στοιχεία από έναν άλλο επαναληπτικό ή αφαιρώντας έναν άλλο επαναληπτικό από αυτά.

Ενημέρωση μετρητή με στοιχεία από άλλο επαναληπτικό

Ας αρχικοποιήσουμε μια άλλη συμβολοσειρά Another_word:

>>> another_word = "effervescence"

Ας υποθέσουμε ότι θέλουμε να ενημερώσουμε το αντικείμενο μετρητή letter_count με τα στοιχεία από τη συμβολοσειρά Another_word.

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο update() στο αντικείμενο μετρητή 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})

Στην έξοδο, βλέπουμε ότι το αντικείμενο μετρητή έχει ενημερωθεί για να περιλαμβάνει επίσης τα γράμματα και τον αριθμό των εμφανίσεών τους από την Another_word.

Αφαίρεση στοιχείων από έναν άλλο επαναληπτικό

Τώρα ας αφαιρέσουμε την τιμή του Another_word από το αντικείμενο letter_count. Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε τη μέθοδο subtract(). Χρησιμοποιώντας το .subtract() αφαιρούνται οι τιμές που αντιστοιχούν σε στοιχεία στο από το .

Ας αφαιρέσουμε μια άλλη_λέξη από το 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})

Βλέπουμε ότι έχουν αφαιρεθεί οι τιμές που αντιστοιχούν στα γράμματα σε μια άλλη_λέξη, αλλά τα προστιθέμενα κλειδιά ‘f’ και ‘v’ δεν αφαιρούνται. Τώρα αντιστοιχίζονται σε μια τιμή 0.

Σημείωση: Εδώ, έχουμε περάσει σε Another_word, μια συμβολοσειρά Python, στην κλήση της μεθόδου subtract(). Μπορούμε επίσης να περάσουμε σε ένα αντικείμενο μετρητή Python ή άλλο επαναληπτικό.

Τομή μεταξύ δύο μετρητών αντικειμένων στην Python

Μερικές φορές μπορεί να θέλετε να βρείτε τη διασταύρωση μεταξύ δύο αντικειμένων μετρητή Python για να προσδιορίσετε ποια κλειδιά είναι κοινά μεταξύ των δύο.

Ας δημιουργήσουμε ένα αντικείμενο μετρητή, ας πούμε, letter_count_2, από τη συμβολοσειρά Another_word ‘effervescence’.

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

Μπορούμε να χρησιμοποιήσουμε τον απλό & τελεστή για να βρούμε τη διασταύρωση μεταξύ letter_count και letter_count_2.

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

Παρατηρήστε πώς λαμβάνετε τα κλειδιά και τον αριθμό των κοινών εμφανίσεων για τις δύο λέξεις. Τόσο η «αναγέννηση» και ο «αναβρασμός» περιέχουν δύο εμφανίσεις του «e» και από μία εμφάνιση του «r», «n», «s» και «c» κοινά.

  Πώς να προβάλετε όλες τις φωτογραφίες που στάλθηκαν μέσω ενός νήματος συνομιλίας iMessages

Βρείτε τα πιο συχνά αντικείμενα Χρησιμοποιώντας το most_common

Μια άλλη κοινή λειτουργία στο αντικείμενο μετρητή Python είναι η εύρεση των στοιχείων που εμφανίζονται πιο συχνά.

Για να λάβετε τα επάνω k πιο συνηθισμένα στοιχεία στον μετρητή, μπορείτε να χρησιμοποιήσετε τη μέθοδο most_common() στο αντικείμενο μετρητή. Εδώ, καλούμε την most_common() στο letter_count για να βρούμε τα τρία γράμματα που εμφανίζονται πιο συχνά.

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

Βλέπουμε ότι τα γράμματα «e», «n» και «a» εμφανίζονται δύο φορές στη λέξη «αναγέννηση».

Αυτό είναι ιδιαίτερα χρήσιμο εάν ο μετρητής περιέχει μεγάλο αριθμό καταχωρίσεων και σας ενδιαφέρει να εργαστείτε με τα πιο συνηθισμένα κλειδιά.

συμπέρασμα

Ακολουθεί μια γρήγορη ανασκόπηση των όσων μάθαμε στο σεμινάριο:

  • Η κλάση Counter από την ενσωματωμένη ενότητα συλλογών της Python μπορεί να χρησιμοποιηθεί για τη λήψη ενός λεξικού με τιμές μέτρησης όλων των στοιχείων σε οποιοδήποτε επαναληπτικό. Θα πρέπει να βεβαιωθείτε ότι όλα τα στοιχεία στο iterable μπορούν να κατακερματιστούν.
  • Μπορείτε να ενημερώσετε τα περιεχόμενα ενός αντικειμένου μετρητή Python με περιεχόμενα από άλλο αντικείμενο μετρητή ή οποιοδήποτε άλλο επαναληπτικό αντικείμενο χρησιμοποιώντας τη μέθοδο update() με τη σύνταξη: counter1.update(counter2). Σημειώστε ότι μπορείτε να χρησιμοποιήσετε οποιοδήποτε iterable στη θέση του counter2.
  • Εάν θέλετε να αφαιρέσετε τα περιεχόμενα ενός από τους επαναληπτικούς από τον ενημερωμένο μετρητή, μπορείτε να χρησιμοποιήσετε τη μέθοδο αφαίρεσης(): counter1.subtract(counter2).
  • Για να βρείτε τα κοινά στοιχεία μεταξύ δύο αντικειμένων μετρητή, μπορείτε να χρησιμοποιήσετε τον τελεστή &. Δεδομένων δύο μετρητών counter1 και counter2, το counter1 & counter2 επιστρέφει την τομή αυτών των δύο αντικειμένων μετρητή.
  • Για να λάβετε τα k πιο συχνά στοιχεία σε έναν μετρητή, μπορείτε να χρησιμοποιήσετε τη μέθοδο most_common(). Το counter.most_common(k) δίνει τα k πιο συνηθισμένα στοιχεία και τις αντίστοιχες μετρήσεις.

Στη συνέχεια, μάθετε πώς να χρησιμοποιείτε το προεπιλεγμένο dict, μια άλλη τάξη στη λειτουργική μονάδα συλλογών. Μπορείτε να χρησιμοποιήσετε το προεπιλεγμένο dict αντί για ένα κανονικό λεξικό Python για να χειριστείτε τα κλειδιά που λείπουν.