4.1 Pobieranie podzbioru według reguły
Podzbiór to zbiór, którego wszystkie elementy należą do innego, większego zbioru. W Pythonie istnieje kilka wbudowanych metod i operatorów do pracy z podzbiorami. Poniżej opowiem, jak uzyskać podzbiory, jak sprawdzić, czy jeden zbiór jest podzbiorem innego oraz jak wykorzystać tę wiedzę w różnych scenariuszach.
Użycie pętli for
Możesz utworzyć pusty zbiór i dodawać do niego elementy spełniające warunek za pomocą pętli for
.
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set()
for x in my_set:
if x % 2 == 0:
even_set.add(x)
print(even_set) # Wypisanie: {2, 4, 6, 8, 10}
To jest najprostszy i najbardziej oczywisty sposób stworzenia podzbioru. Ale są jeszcze inne, bardziej zwięzłe sposoby.
Użycie funkcji filter()
Funkcja filter()
stosuje funkcję do każdego elementu i zwraca tylko te elementy, dla których funkcja zwróciła True. Wynik trzeba przekształcić z powrotem w zbiór.
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set(filter(lambda x: x % 2 == 0, my_set))
print(even_set) # Wypisanie: {2, 4, 6, 8, 10}
Wewnątrz funkcji filter()
używane jest wyrażenie lambda - to taki skrócony sposób zadania funkcji serwisowej lub reguły do filtrowania. O lambdach opowiem za kilka lekcji.
4.2 Użycie generatorów zbiorów
Pamiętasz List Comprehension
? Kiedy w nawiasach kwadratowych zadawaliśmy szybki sposób generowania listy i jej elementów? To narzędzie składniowe miało taki wygląd:
[wyrażenie for zmienna in sekwencja]
Gdzie:
-
zmienna
— identyfikator jakiejś zmiennej, -
sekwencja
— sekwencja wartości, które przyjmuje dana zmienna (to może być lista, łańcuch znaków lub obiekt otrzymany za pomocą funkcjirange
), -
wyrażenie
— jakieś wyrażenie, zazwyczaj zależne od użytej w generatorze zmiennej, którym będą wypełnione elementy listy.
Dla zbiorów istnieje analogiczna funkcja, tylko trzeba użyć nawiasów klamrowych:
{wyrażenie for zmienna in sekwencja}
Generatory zbiorów pozwalają łatwo i zwięźle tworzyć nowe zbiory na podstawie istniejących, stosując warunki filtrowania.
Oto jak można wybrać tylko parzyste elementy z zbioru:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = {x for x in my_set if x % 2 == 0}
print(even_set) # Wypisanie: {2, 4, 6, 8, 10}
A oto jak wybrać tylko łańcuchy znaków:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, "jabłko", "banan"}
even_set = {x for x in my_set if type(x) == str}
print(even_set) # Wypisanie: {"jabłko", "banan"}
4.3 Sprawdzanie obecności elementu
Jedną z podstawowych operacji, jakie można wykonywać na zbiorach, jest sprawdzanie obecności elementu w zbiorze. W Pythonie istnieje kilka sposobów, aby to zrobić. Przeanalizujmy różne metody sprawdzania, czy element jest obecny w zbiorze.
Użycie operatora in
Najbardziej powszechny i wygodny sposób sprawdzania obecności elementu w zbiorze — to użycie operatora in
. Ta metoda zwraca True
, jeśli element jest obecny w zbiorze, i False
w przeciwnym razie.
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # Wypisanie: True
print(6 in my_set) # Wypisanie: False
Użycie operatora not in
Operator not in
jest przeciwieństwem operatora in
i służy do sprawdzania, czy element nie jest obecny w zbiorze. Zwraca True
, jeśli element nie jest obecny w zbiorze, i False
w przeciwnym razie.
my_set = {1, 2, 3, 4, 5}
print(6 not in my_set) # Wypisanie: True
print(3 not in my_set) # Wypisanie: False
Użycie pętli
Chociaż użycie pętli do sprawdzania obecności elementu w zbiorze nie jest najbardziej efektywnym sposobem, może być przydatne w sytuacjach, kiedy pracujesz z bardziej złożonymi strukturami danych lub wykonujesz dodatkowe operacje.
my_set = {1, 2, 3, 4, 5}
element = 3
found = False
for item in my_set:
if item == element:
found = True
break
print(found) # Wypisanie: True
4.4 Sprawdzanie zagnieżdżenia zbiorów
Python dostarcza operator < <=
i metodę issubset()
dla sprawdzania, czy jeden zbiór jest podzbiorem drugiego.
Użycie operatora <=
Operator <=
pozwala łatwo sprawdzić, czy jeden zbiór jest podzbiorem drugiego.
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a <= set_b) # Wypisanie: True
print(set_b <= set_a) # Wypisanie: False
Użycie metody issubset()
Metoda issubset()
wykonuje tę samą funkcję co operator <=
, i zwraca True
, jeśli wszystkie elementy jednego zbioru są zawarte w drugim.
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a.issubset(set_b)) # Wypisanie: True
print(set_b.issubset(set_a)) # Wypisanie: False
Sprawdzanie na nadzbiór
Podobnie jak z podzbiorami, możesz sprawdzić, czy jeden zbiór jest nadzbiorem drugiego, używając operatora >=
i metody issuperset()
.
Użycie operatora >=
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a >= set_b) # Wypisanie: True
print(set_b >= set_a) # Wypisanie: False
Użycie metody issuperset()
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a.issuperset(set_b)) # Wypisanie: True
print(set_b.issuperset(set_a)) # Wypisanie: False
GO TO FULL VERSION