Moduł kolekcji Pythona: zaawansowane typy kontenerów
Naucz się korzystać z modułu kolekcji Pythona. Licznik główny, defaultdict, Nametuple, deque i sposoby upraszczania złożonych struktur danych.
Przegląd
Chociaż podstawowe kontenery Pythona — listy, słowniki, zbiory i krotki — wystarczą do większości zadań, złożone programy często wymagają wyspecjalizowanych struktur danych. Aby rozwiązać ten problem, Python udostępnia wbudowany moduł „kolekcji”. Moduł ten zawiera wysokowydajne kontenerowe typy danych zaprojektowane w celu wydajniejszego rozwiązywania typowych zadań programistycznych przy użyciu czystszej i bardziej samodokumentującej się składni.
Do najbardziej przydatnych klas należy `defaultdict`, która działa jak zwykły słownik, ale automatycznie inicjuje brakujące klucze wartością domyślną (np. pustą listą lub liczbą całkowitą zero), eliminując potrzebę szczegółowego sprawdzania kluczy. Kolejną potęgą jest klasa „Licznik”, specjalnie zoptymalizowana pod kątem zliczania wystąpień elementów w obiekcie iterowalnym. W przypadku szybkich kolejek i stosów „deque” (kolejka dwustronna) oferuje wstawianie i usuwanie „O(1)” na obu końcach, w przeciwieństwie do list, które cierpią z powodu przesunięć „O(N)”.
Na koniec moduł oferuje opcję `namedtuple`, która tworzy lekkie, przypominające krotkę obiekty, do których można uzyskać dostęp za pomocą notacji kropkowej oraz tradycyjnych indeksów (np. `point.x` zamiast `point[0]`). Daje to szybkość i niezmienność krotki z czytelnością klasy. Włączenie modułu kolekcji do przepływu pracy gwarantuje, że Twój kod pozostanie elegancki, wydajny i czysty.
Dane wyjściowe kodu i wykonania
Liczenie słów za pomocą licznika i organizowanie grup słowników za pomocą defaultdict.
from collections import Counter, defaultdict, namedtuple
# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")
# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")
# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20Wdrażanie krok po kroku
- Analizowanie plików dziennika w celu zliczania wystąpień błędów za pomocą licznika
- Budowanie kolejek priorytetowych lub harmonogramów zadań za pomocą deque
- Reprezentowanie wymiarów współrzędnych lub rekordów danych przy użyciu nazwanej krotki
Często zadawane pytania
Dlaczego deque jest szybsze niż lista dla operacji w kolejce?
Lista wymaga przesuwania wszystkich kolejnych elementów w pamięci podczas wstawiania lub usuwania od przodu (O(N)). Deque jest zaimplementowane jako podwójnie połączona lista, umożliwiająca operacje O(1) na obu końcach.
Czy mogę zmienić elementy nazwanej krotki?
Nie. Ponieważ nazwane krotki dziedziczą po krotkach standardowych, są w pełni niezmienne. Aby zwrócić nową zmodyfikowaną instancję, należy użyć metody ._replace().
Powiązane tematy
Dowiedz się wszystkiego o listach w Pythonie. Odkryj, jak tworzyć, wycinać, modyfikować i iterować po tablicach natywnie w języku Python.
Słowniki PythonaOpanuj słowniki Pythona. Dowiedz się, jak przechowywać, pobierać i obsługiwać dane pary klucz-wartość. Poznaj wydajność i najlepsze praktyki dotyczące mapowań.
Python ItertoolsNaucz się modułu itertools w Pythonie. Opanuj nieskończone iteratory, kombinacje, permutacje, grupowanie i wydajne przetwarzanie danych.
Polecane zasoby Pythona
Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.
Jak sortować listę w Pythonie
Dowiedz się, jak sortować listę w Pythonie za pomocą metody sort() i funkcji sorted(). Odkryj przykłady niestandardowego sortowania kluczy i odwrotnej kolejności.
Ściągawka dotycząca metod ciągów w Pythonie
Kompletny przewodnik dotyczący manipulacji ciągami znaków w języku Python. Opanuj formatowanie, wyszukiwanie, dzielenie, zastępowanie i sprawdzanie właściwości ciągów.
Python kontra JavaScript: który język programowania jest najlepszy?
Kompleksowe porównanie Pythona i JavaScript. Poznaj różnice w składni, wydajność, przypadki użycia (backend vs frontend) i przykłady kodowania.