Wyjaśnienie lekcji
Po tej lekcji będziesz potrafić:
Zbiór (set) przechowuje unikalne wartości. Zduplikowane wpisy zlewają się w jeden element, dlatego zbiory przydają się do tagów, uprawnień i ustalania, których identyfikatorów brakuje. Zbiory nie mają sensownych pozycji: nigdy nie polegaj na kolejności iteracji ani nie próbuj odczytywać items[0] ze zbioru.
Użyj {value1, value2}, aby utworzyć niepusty zbiór, i set() dla pustego ({} tworzy pusty słownik). add(value) wstawia jedną wartość. discard(value) usuwa wartość, jeśli jest obecna, i nic nie robi, gdy jej brakuje; w odróżnieniu od remove(value) nie zgłasza błędu, gdy wartości nie ma.
Przynależność sprawdza się za pomocą value in items. Operacje na zbiorach odpowiadają na przydatne pytania: a | b łączy wszystkie unikalne wartości; a & b znajduje wartości wspólne; a - b zachowuje wartości obecne tylko w a. Operacje te zwracają nowe zbiory, zamiast modyfikować operandy.
Powtórzony identyfikator liczy się jako jeden element.
regions = {"us", "eu", "us"}
print(len(regions))
print("eu" in regions)Wynik:
2
Truediscard() jest bezpieczne, nawet jeśli wartości już brakuje.
roles = {"reader"}
roles.add("editor")
roles.discard("owner")
print(len(roles))
print("editor" in roles)Wynik:
2
TrueCzęść wspólna zlicza wartości wspólne; suma zlicza wszystko, co występuje w którymkolwiek zbiorze.
online = {"api", "worker", "cache"}
monitored = {"cache", "mailer"}
print(len(online & monitored))
print(len(online | monitored))Wynik:
1
4Różnica zachowuje wartości, które nie zostały przyznane.
required = {"read", "write", "deploy"}
granted = {"read", "deploy"}
print(len(required - granted))Wynik:
1| Potrzeba | Operacja |
|---|---|
| Pusty zbiór | set() |
| Dodanie jednej wartości | items.add(value) |
| Bezpieczne usunięcie | items.discard(value) |
| Sprawdzenie przynależności | value in items |
| Połączenie unikalnych elementów | `a |
| Elementy wspólne | a & b |
| Elementy tylko z lewej strony | a - b |
{} to pusty słownik, a nie pusty zbiór.append() należy do list, a nie do zbiorów.remove() zgłasza KeyError dla nieobecnego elementu; użyj discard(), gdy brak elementu jest dopuszczalny.a - b to nie to samo co b - a.