10 Überraschende Dinge, die Sie mit Pythons Sammlungsmodul machen können10 Überraschende Dinge, die Sie mit Pythons Sammlungsmodul machen können
Bild von Editor | Chatgpt

Einführung

Die Standardbibliothek von Python ist umfangreich und bietet eine breite Palette von Modulen, um gemeinsame Aufgaben effizient auszuführen.

Darunter die collections Das Modul ist ein herausragendes Beispiel, das spezielle Containerdatentypen bietet, die als Alternativen zu Pythons allgemeinen Goal-integrierten Containern wie dienen können dictAnwesend checklistAnwesend setUnd tuple. Während viele Entwickler mit einigen seiner Komponenten vertraut sind, beherbergt das Modul eine Vielzahl von Funktionen, die überraschend nützlich sind und den Code vereinfachen, die Lesbarkeit verbessern und die Leistung steigern können.

In diesem Tutorial werden zehn praktische – und möglicherweise überraschende – Bewerbungen der Python untersucht collections Modul.

1. Zählen Sie mühelos Hashable -Objekte mit Zähler

Eine häufige Aufgabe in nahezu jedem Datenanalyseprojekt besteht darin, die Vorkommen von Elementen in einer Sequenz zu zählen. Der collections.Counter Die Klasse wurde speziell dafür entwickelt. Es ist eine Wörterbuch -Unterklasse, in der Elemente als Schlüssel gespeichert und ihre Zählungen als Werte gespeichert werden.

from collections import Counter

# Depend the frequency of phrases in an inventory
phrases = ('galaxy', 'nebula', 'asteroid', 'comet', 'gravitas', 'galaxy', 'stardust', 'quasar', 'galaxy', 'comet')
word_counts = Counter(phrases)

# Discover the 2 most typical phrases
most_common = word_counts.most_common(2)

# Output outcomes
print(f"Phrase counts: {word_counts}")
print(f"Commonest phrases: {most_common}")

Ausgabe:

Phrase counts: Counter({'galaxy': 3, 'comet': 2, 'nebula': 1, 'asteroid': 1, 'gravitas': 1, 'stardust': 1, 'quasar': 1})
Commonest phrases: (('galaxy', 3), ('comet', 2))

2. Erstellen leichter Klassen mit namedtuple

Wenn Sie eine einfache Klasse nur zum Gruppieren von Daten ohne Methoden benötigen, a namedtuple ist eine nützliche, speichereffiziente Possibility. Sie können tupelähnliche Objekte erstellen, die Felder über die Attribut-Lookup sowie indexierbar und iterierbar sind. Dies macht Ihren Code lesbarer als die Verwendung eines Normal -Tupels.

from collections import namedtuple

# Outline a E-book namedtuple
# Fields: title, writer, year_published, isbn
E-book = namedtuple('E-book', ('title', 'writer', 'year_published', 'isbn'))

# Create an occasion of the E-book
my_book = E-book(
    title="The Hitchhiker"s Information to the Galaxy',
    writer="Douglas Adams",
    year_published=1979,
    isbn='978-0345391803'
)

print(f"E-book Title: {my_book.title}")
print(f"Creator: {my_book.writer}")
print(f"12 months Printed: {my_book.year_published}")
print(f"ISBN: {my_book.isbn}")

print("n--- Accessing by index ---")
print(f"Title (by index): {my_book(0)}")
print(f"Creator (by index): {my_book(1)}")
print(f"12 months Printed (by index): {my_book(2)}")
print(f"ISBN (by index): {my_book(3)}")

Ausgabe:

Accessing e-book knowledge by discipline title
Title (by discipline title): The Hitchhiker's Information to the Galaxy
Creator (by discipline title): Douglas Adams
12 months Printed (by discipline title): 1979
ISBN (by discipline title): 978-0345391803

Accessing e-book knowledge by index
Title (by index): The Hitchhiker's Information to the Galaxy
Creator (by index): Douglas Adams
12 months Printed (by index): 1979
ISBN (by index): 978-0345391803

Sie können sich ein vorstellen namedtuple ähnlich wie eine veränderliche C -Struktur oder als Datenklasse ohne Methoden. Sie haben definitiv ihre Verwendung.

3.. Umgang mit fehlenden Wörterbuchschlüssel anmutig mit defaultdict

Eine häufige Frustration bei der Arbeit mit Wörterbüchern ist die KeyError Dies geschieht, wenn Sie versuchen, auf einen Schlüssel zuzugreifen, der nicht existiert. Der collections.defaultdict ist die perfekte Lösung. Es ist eine Unterklasse von dict Dadurch wird eine Fabrikfunktion aufgerufen, um einen Standardwert für fehlende Schlüssel zu liefern. Dies ist besonders nützlich für die Gruppierung von Gegenständen.

from collections import defaultdict

# Group an inventory of tuples by the primary aspect
scores_by_round = (('contestantA', 8), ('contestantB', 7), ('contestantC', 5),
                   ('contestantA', 7), ('contestantB', 7), ('contestantC', 6),
                   ('contestantA', 9), ('contestantB', 5), ('contestantC', 4))
grouped_scores = defaultdict(checklist)

for key, worth in scores_by_round:
    grouped_scores(key).append(worth)

print(f"Grouped scores: {grouped_scores}")

Ausgabe:

Grouped scores: defaultdict(, {'contestantA': (8, 7, 9), 'contestantB': (7, 7, 5), 'contestantC': (5, 6, 4)})

4. Implementieren schneller Warteschlangen und Stapel mit deque

Python -Pay attention können als Stapel und Warteschlangen verwendet werden, obwohl sie für diese Operationen nicht optimiert sind. Das Anhängen und Anhängen vom Ende einer Liste ist schnell, aber das Gleiche von Anfang an ist langsam, da alle anderen Elemente verschoben werden müssen. Der collections.deque (doppelte Warteschlange) ist für schnelle Anhänge und Pops von beiden Enden ausgelegt.

Erstens hier ein Beispiel für eine Warteschlange mithilfe deque.

from collections import deque

# Create a queue
d = deque((1, 2, 3))
print(f"Unique queue: {d}")

# Add to the appropriate
d.append(4)
print("Including merchandise to queue: 4")
print(f"New queue: {d}")

# Take away from the left
print(f"Popping queue merchandise (from left): {d.popleft()}")  

# Output ultimate queue
print(f"Ultimate queue: {d}")

& nbsp

Ausgabe:

Unique queue: deque((1, 2, 3))
Including merchandise to queue: 4
New queue: deque((1, 2, 3, 4))
Popping queue merchandise (from left): 1
Ultimate queue: deque((2, 3, 4))

Und jetzt lass uns benutzen deque Um einen Stapel zu erstellen:

from collections import deque

# Create a stack
d = deque((1, 2, 3))
print(f"Unique stack: {d}")

# Add to the appropriate
d.append(5)
print("Including merchandise to stack: 5")
print(f"New stack: {d}")

# Take away from the appropriate
print(f"Popping stack merchandise (from proper): {d.pop()}")

# Output ultimate stack
print(f"Ultimate stack: {d}")

Ausgabe:

Unique stack: deque((1, 2, 3))
Including merchandise to stack: 5
New stack: deque((1, 2, 3, 5))
Popping stack merchandise (from proper): 5
Ultimate stack: deque((1, 2, 3))

5. Erinnern Sie die Einfügungsordnung mit OrderedDict

Vor Python 3.7 konnten Standardwörterbücher die Reihenfolge, in die Elemente eingefügt wurden, nicht bewahrt. Um dies zu lösen, die, die collections.OrderedDict wurde verwendet. Während Standarddikte jetzt die Einfügungsreihenfolge aufrechterhalten, OrderedDict hat immer noch einzigartige Funktionen wie die move_to_end() Methode, die für Aufgaben wie das Erstellen eines einfachen Cache nützlich ist.

from collections import OrderedDict

# An OrderedDict remembers the order of insertion
od = OrderedDict()
od('a') = 1
od('b') = 2
od('c') = 3

print(f"Begin order: {checklist(od.keys())}")

# Transfer 'a' to the tip
od.move_to_end('a')
print(f"Ultimate order: {checklist(od.keys())}")

Ausgabe:

Begin order: ('a', 'b', 'c')
Ultimate order: ('b', 'c', 'a')

6. Kombinieren Sie mehrere Wörterbücher mit ChainMap

Der collections.ChainMap Die Klasse bietet eine Möglichkeit, mehrere Wörterbücher miteinander zu verknüpfen, damit sie als einzelne Einheit behandelt werden können. Es ist oft viel schneller, als ein neues Wörterbuch zu erstellen und mehrere zu laufen replace() Anrufe. Such nach den zugrunde liegenden Zuordnungen nacheinander, bis ein Schlüssel gefunden wird.

Lassen Sie uns eine Chainmap namens Chain erstellen und sie nach Schlüssel abfragen.

from collections import ChainMap

# Create dictionaries
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# Create a ChainMap
chain = ChainMap(dict1, dict2)

# Print dictionaries
print(f"dict1: {dict1}")
print(f"dict2: {dict2}")

# Question ChainMap for keys and return values
print("nQuerying ChainMap for keys")
print(f"a: {chain('a')}")
print(f"c: {chain('c')}")
print(f"b: {chain('b')}")

Ausgabe:

dict1: {'a': 1, 'b': 2}
dict2: {'b': 3, 'c': 4}

Querying keys for values
a: 1
c: 4
b: 2

Beachten Sie, dass in dem obigen Szenario ‚B‘ in First in gefunden wird dict1das erste Wörterbuch in chainund so ist es der Wert, der mit diesem Schlüssel verbunden ist, der zurückgegeben wird.

7. Eine begrenzte Geschichte mit Deque’s behalten maxlen

A deque kann mit einer festen maximalen Länge mit dem erstellt werden maxlen Argument. Wenn mehr Elemente hinzugefügt werden als die maximale Länge, werden die Elemente vom gegenüberliegenden Ende automatisch verworfen. Dies ist perfekt, um eine Geschichte der letzten N -Artikel zu behalten.

from collections import deque

# Preserve a historical past of the final 3 objects
historical past = deque(maxlen=3)
historical past.append("cd ~")
historical past.append("ls -l")
historical past.append("pwd")
print(f"Begin historical past: {historical past}")

# Add a brand new merchandise, push out the left-most merchandise
historical past.append("mkdir knowledge")
print(f"Ultimate historical past: {historical past}")

Ausgabe:

Begin historical past: deque(('cd ~', 'ls -l', 'pwd'), maxlen=3)
Ultimate historical past: deque(('ls -l', 'pwd', 'mkdir knowledge'), maxlen=3)

8. Schaffung verschachtelter Wörterbücher leicht mit defaultdict

Aufbau auf defaultdictSie können mühelos verschachtelte oder baumähnliche Wörterbücher erstellen. Durch Bereitstellung a lambda Funktion, die einen anderen zurückgibt defaultdictSie können Wörterbücher von Wörterbüchern im laufenden Fliegen erstellen.

from collections import defaultdict
import json

# A perform that returns a defaultdict
def tree():
    return defaultdict(tree)

# Create a nested dictionary
nested_dict = tree()
nested_dict('customers')('user1')('title') = 'Felix'
nested_dict('customers')('user1')('e-mail') = 'user1@instance.com'
nested_dict('customers')('user1')('telephone') = '515-KL5-5555'

# Output formatted JSON to console
print(json.dumps(nested_dict, indent=2))

Ausgabe:

{
  "customers": {
    "user1": {
      "title": "Felix",
      "e-mail": "user1@instance.com",
      "telephone": "515-KL5-5555"
    }
  }
}

9. Durchführung arithmetischer Operationen auf Counters

Information Flash: Sie können arithmetische Operationen wie Addition, Subtraktion, Kreuzung und Vereinigung ausführen Counter Objekte. Dies ist ein leistungsstarkes Werkzeug zum Vergleich und Kombinieren der Frequenzzahlen aus verschiedenen Quellen.

from collections import Counter

c1 = Counter(a=4, b=2, c=0, d=-2)
c2 = Counter(a=1, b=2, c=3, d=4)

# Add counters -> provides counts for frequent keys
print(f"c1 + c2 = {c1 + c2}")

# Subtract counters -> retains solely constructive counts
print(f"c1 - c2 = {c1 - c2}")

# Intersection -> takes minimal of counts
print(f"c1 & c2 = {c1 & c2}")

# Union -> takes most of counts
print(f"c1 | c2 =  c2")

Ausgabe:

c1 + c2 = Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2})
c1 - c2 = Counter({'a': 3})
c1 & c2 = Counter({'b': 2, 'a': 1})
c1 | c2 = Counter({'a': 4, 'd': 4, 'c': 3, 'b': 2})

10. effizient rotierende Elemente mit deque

Der deque Objekt hat a rotate() Methode, mit der Sie die Elemente effizient drehen können. Ein positives Argument dreht sich rechts Elemente; ein negatives hyperlinks. Dies ist viel schneller als das Schneiden und Wiederaufnehmen von Pay attention oder Tupeln.

from collections import deque

d = deque((1, 2, 3, 4, 5))
print(f"Unique deque: {d}")

# Rotate 2 steps to the appropriate
d.rotate(2)
print(f"After rotating 2 to the appropriate: {d}")

# Rotate 3 steps to the left
d.rotate(-3)
print(f"After rotating 3 to the left: {d}")

Ausgabe:

Unique deque: deque((1, 2, 3, 4, 5))
After rotating 2 to the appropriate: deque((4, 5, 1, 2, 3))
After rotating 3 to the left: deque((2, 3, 4, 5, 1))

Einpacken

Der collections Das Modul in Python ist eine Killersammlung von spezialisierten Hochleistungs-Container-Datentypen. Vom Zählen von Gegenständen mit Counter zum Aufbau effizienter Warteschlangen mit dequeDiese Instruments können Ihren Code sauberer, effizienter und pythonischer machen. Indem Sie sich mit diesen überraschenden und leistungsstarken Funktionen vertraut machen, können Sie häufige Programmierprobleme auf elegantere und effektivere Weise lösen.

Matthew Mayo (@Mattmayo13) hat einen Grasp -Abschluss in Informatik und ein Diplom in Information Mining. Als Geschäftsführer von Kdnuggets & Statologieund beitragen Redakteur bei Meisterschaft für maschinelles LernenMatthew zielt darauf ab, komplexe Datenwissenschaftskonzepte zugänglich zu machen. Zu seinen beruflichen Interessen zählen natürliche Sprachverarbeitung, Sprachmodelle, Algorithmen für maschinelles Lernen und die Erforschung der aufstrebenden KI. Er ist von der Mission getrieben, das Wissen in der Datenwissenschaftsgemeinschaft zu demokratisieren. Matthew kodiert seit seinem 6 -jährigen Lebensjahr.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert