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
| Typ | Zamówione? | Czy oszukujemy? | Powtórzenia? | Dostęp |
|---|---|---|---|---|
list | Tak | Tak | Tak | według indeksu |
tuple | Tak | nie | Tak | według indeksu |
set | żadnych stanowisk | Tak | nie — tylko unikalne | (in) |
frozenset | żadnych stanowisk | nie | nie — tylko unikalne | (in) |
dict | zachowuje kolejność wstawiania | Tak | klawisze są unikalne | wedł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
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 → False | Nie 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