Rozdział 11 · Mnóstwo informacji!

Jak wybrać odpowiednią strukturę

Teraz, gdy wszystkie cztery kolekcje są znane osobno, — jak zdecydować, której użyć w konkretnym zadaniu.

Tabela zmienności

TypZamówione?Czy oszukujemy?Powtórzenia?Dostęp
listTakTakTakwedług indeksu
tupleTaknieTakwedług indeksu
setżadnych stanowiskTaknie — tylko unikalne(in)
frozensetżadnych stanowisknienie — tylko unikalne(in)
dictzachowuje kolejność wstawianiaTakklawisze są unikalnewedług klucza

Tabela skrótu

Co można umieścić w zbiór / używać jako klucz słownikowy
Zwykle haszowalne
int, float, str
bool, bytes
tuple (jeśli elementy są haszowalne)
frozenset
Nie są hashowane
list
dict
set

Ostateczny punkt odniesienia do wyboru

Pełna wskazówka wyboru konstrukcji
Czy potrzebujesz pary klucz→wartość?
dict
W przeciwnym razie: potrzebne są tylko unikalne wartości, kolejność nie jest ważna?
set
Inaczej: potrzebny jest porządek, wartości dokładnie się nie zmienią?
tuple
W przeciwnym razie: potrzebujesz porządku i będziesz musiał zmienić treść?
list
Zasada – najpierw pomyśl o zadaniu, potem o składni

Prawdziwość kolekcji (truthiness)

Z rozdziału 9: Pusta kolekcja False w kontekście logicznym, niepusty — True, niezależnie od wartości zawartych w środku:

Pusty → FalseNie pusty → True
[][0]
()("",)
set(){0}
{}{"x": None}
truthiness_kollekcij.py
items = []
if items:
    print(„Są elementy”)
else:
    print(„Lista jest pusta”)
if items: jest bardziej idiomatyczny niż if len(items) > 0:
Obie wersje działają tak samo, ale if items: bezpośrednio pyta „lista nie pusty?”

Zmiana kolekcji podczas brutalnej siły to kolejna pułapka

mutation_during_iteration.py
items = [2, 4, 6, 8]
for item in items:
    if item % 2 == 0:
        items.remove(item)
print(items)   # [4, 8] – nie [], chociaż warunek ten jest odpowiedni dla KAŻDEGO elementu!
Nie zmieniaj rozmiaru kolekcji, dopóki ją przeglądasz tym samym cyklem
Usuwanie elementów listy podczas wyliczania tej samej listy przesuwa indeksy tuż pod stopami pętli — niektóre elementy zostaną pomijane. Dla słownika lub zestawu Python wyrzuci RuntimeError: dictionary changed size during iteration. Bezpieczne sposoby: zbieraj wynik do NOWEJ kolekcji, używaj comprehension lub iteruj przez kopię jawną — for item in items.copy():.
Praktyka: Wybór struktury danych scenariusza
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →