Rozdział 11 · Mnóstwo informacji!

Zestawy

Kolekcja bez duplikatów i pozycji to szybki sposób na usunięcie duplikatów i porównanie zestawów wartości.

Wielu (set) to zbiór figurek nawiasy, które mają dwie kluczowe różnice względem listy: elementy listy nie są powtarzane, a trafienia to Według indeksu numerycznego, nie, zbiór nie jest sekwencją pozycyjną.

mnozhestva.py
chisla = {1, 2, 2, 3, 3, 3}
print(chisla)   # {1, 2, 3} – powtórzenia zniknęły same z siebie

Po co są zbiory?

Dwa najczęstsze przypadki to szybkie usunięcie powtórzeń z listy i szybkie sprawdzenie, czy w ogóle są wartość kolekcji.

primenenie_mnozhestv.py
spisok_s_povtorami = [1, 2, 2, 3, 1, 4]
unikalnye = set(spisok_s_povtorami)
print(unikalnye)   # {1, 2, 3, 4}
chlenstvo_mnozhestva.py
allowed = {"admin", "editor", "viewer"}
role = "editor"
if role in allowed:
    print(„Dostęp dozwolony”)
Zbiór nie jest „przypadkowo uporządkowany” — po prostu nie jest pozycyjny
Nie traktuj set jak „losowego lista” nie stanowiska ogólnie to pisanie my_set[0] nie może (TypeError), a kod nigdy nie powinien polegać na kolejności zbiór pętli.

Pusty zbiór — częsta pułapka

pustoe_mnozhestvo.py
print(type({}))        # <class 'dict'> — to puste słownik!
print(type(set()))    # <class 'set'> to pusta zbiór
{} jest pustym słownik, a nie pustym zbiór
Nawiasy klamrowe bez zawartości Python domyślnie uznaje za puste dict (§11.17), ponieważ słowniki pojawiły się w języku jako bardziej podstawowy przypadek użycia {}. Aby stworzyć pusty zbiór, musisz wyraźnie napisać set().

add, remove, discard, pop, clear

metody_mnozhestv.py
tags = {"python", "beginner"}
tags.add("tutorial")
tags.discard("missing")   # bez błędu, nawet jeśli przedmiot nie jest obecny
print(tags)
MetodaJeśli elementu nie ma
.remove(x)KeyError
.discard(x)nic się nie dzieje, nie ma żadnego błędu
pop() usuwa element ARBITRARY ze zbioru
W przeciwieństwie do list.pop()zbiór nie zawiera pojęcia „ostatniego elementu” set.pop() usuwa i zwraca jeden element, ale nie wiadomo wcześniej, który to jest.

Operacje na zestawach

operacii_mnozhestv.py
a = {1, 2, 3}
b = {2, 3, 4}

print(a | b)   # union: {1, 2, 3, 4}
print(a & b)   # przecięcie: {2, 3}
print(a - b)   # Różnica: {1}
Pełna algebra zbiorów — w §11.16
To tylko wstęp. Diagramy Venna dla wszystkich czterech operacji, podzbiorów i hashowalności zostaną omówione w następnej sekcji.
Praktyka: Scenografia i ich działanie
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →