Zbiory - nieuporządkowane kolekcje unikatowych elementów
Zbiory są jedną z podstawowych struktur danych, które umożliwiają przechowywanie unikatowych elementów. Są to niezmienne i nieuporządkowane kolekcje, co oznacza, iż elementy w zbiorze nie mają określonej kolejności, a raz dodany element nie może być zmieniony. W tym artykule omówimy, jak korzystać z zbiorów w Pythonie, jakie są ich cechy i jakie operacje można na nich wykonywać.
Tworzenie zbioru
W Pythonie zbiory tworzy się dzięki nawiasów klamrowych {} lub poprzez użycie funkcji set(). Poniżej znajdują się przykłady definicji dwóch zbiorów:
W przykładzie definiujemy dwa zbiory. Zbiór A, który zawiera imiona żeńskie oraz zbiór B, zawierający imiona męskie. Zbiór A tworzymy korzystając z funkcji set(), natomiast zbiór B definiujemy przy użyciu nawiasów klamrowych { }.
Następnie wypisujemy przy użyciu funkcji print elementy obu zbiorów. W wyniku wykonania tego fragmentu kodu otrzymujemy wynik:
Operacje na zbiorach
W języku Python mamy możliwość wyświetlania sumy dwóch zbiorów, wyświetlania ich wspólnej części oraz różnicy między zbiorami.
Aby zsumować elementy dwóch zbiorów używamy funkcji union(), którą wywołujemy na jednym ze zbiorów.
Aby znaleźć część wspólną dwóch zbiorów używamy funkcji intersection(), którą również wywołujemy na jednym ze zbiorów.
Ostatnią operacją jest różnica między zbiorami, aby ją wyliczyć używamy funkcji difference(). W zależności od tego na jakim zbiorze ją wywołamy otrzymamy różne wyniki. Zobaczmy działanie tych funkcji na poniższym przykładzie:
W przykładzie tym definiujemy dwa zbiory C i D. Oba wypełniamy różnymi imionami. Tym razem w obu zbiorach znajdują się elementy wspólne.
Następnie tworzymy nowe zbiory: Suma, Wspolne i Roznica, które zawierają wyniki odpowiadających im operacji. Po każdej z operacji wypisujemy elementy nowo powstałych zbiorów na okno konsoli. W efekcie otrzymujemy następujące wyniki:
Jak widzimy suma zbiorów zawiera wszystkie elementy zbiorów C i D, ale nie zawiera powtórzeń. Oba zbiory C i D zawierały elementy: Idalia i Dawid, a w zbiorze wynikowym elementy te występują jeden raz. Wynika to z głównej adekwatności zbioru – wszystkie elementy są unikalne.
W następnej linijce mamy wypisane elementy wspólne. Jest to wynik działania funkcji intersection().
A w ostatniej linijce wypisujemy różnice zbiorów, czyli ze zbioru C usuwamy elementy, które znajdują się w zbiorze D: Idalia i Dawid.
Dodawanie elementów do zbiorów
Aby dodać element do zbioru używamy funkcji add(). Możemy to zobaczyć na poniższym przykładzie:
W przykładzie definiujemy zbiór E, zawierający imiona żeńskie. W kolejnych linijkach przy użyciu funkcji add, próbujemy dodać kolejne elementy.
Do zbioru zostanie dodany element: „Marysia”.
Natomiast element „Ola” jest już w zbiorze, a jak wiemy zbiór może zawierać jedynie elementy unikalne. Dlatego Ola nie zostanie dodana do zbioru. W wyniku wykonania tego fragmentu kodu otrzymamy na oknie konsoli wynik:
Usuwanie elementów ze zbioru
Aby usunąć element ze zbioru używamy funkcji remove(). Funkcja ta działa jedynie wtedy, gdy element jest z zbiorze. W przypadku, gdy próbujemy usunąć tą funkcją nieistniejący element dostajemy błąd.
Aby usunąć ze zbioru element, który nie jesteśmy pewni czy występuje w tym zbiorze używamy funkcji discard().
Możemy to zobaczyć na poniższym przykładzie:
W przykładzie definiujemy zbiór F, zawierający imiona męskie.
W trzeciej linii wywołujemy funkcję remove(). Chcemy usunąć element „Alex” ze zbioru. Element ten występuje w zbiorze, a więc ten fragment wykona się bezbłędnie.
Natomiast w następnych linijkach, chcemy usunąć element „Olek”. Umieściłam ten fragment w bloku try… except… Zrobiłam to, aby program nie zakończył się z błędem. Gdyż element ten nie występuje w zbiorze. Gdy w bloku try zostanie przechwycony błąd, program przejdzie do wykonywania instrukcji z bloku except, czyli wypisze informacje o błędzie.
W przedostatniej linii próbujemy usunąć element „Olek” przy użyciu funkcji discard(). Funkcja ta obsługuje przypadek braku elementu w zbiorze. A więc linijka ta zostanie wykonana bezbłędnie.
W wyniku wykonania tego fragmentu kodu otrzymamy na oknie konsoli wynik:
Usuwanie elementu ze zbioru - funkcja pop()
W języku Python istnieje jeszcze jedna funkcja, służąca do usuwania elementu zbioru. Jest to funkcja pop(), która usuwa dowolnie wybrany element zbioru. Ponieważ elementy w zbiorze są nieuporządkowane, nigdy nie wiemy jaki element zostanie usunięty. Co więcej funkcja ta zwraca ten usuwany element, który możemy przypisać do jakiejś zmiennej.
Zobaczmy to na poniższym przykładzie:
Definiujemy zbiór G zawierający imiona żeńskie. W drugiej linii usuwamy element ze zbioru korzystając z funkcji pop(). Element ten przypisujemy do zmiennej usuniety_element.
W dwóch ostatnich linijkach wypisujemy wyniki wykonanej operacji.
Funkcja pop() zwróci losowy element. Przy każdorazowym uruchomieniu programu, może to być inny element.
W wyniku wykonania tego fragmentu kodu otrzymaliśmy następujący wynik:
Inne operacje na zbiorach
Na zbiorach możemy również wykonywać operacje, które są dostępne w innych kolekcjach tj. listy lub słowniki.
- Mamy możliwość sprawdzenia, czy element jest w zbiorze. Korzystamy wtedy z słowa kluczowego: in.
- Możemy sprawdzić, czy elementu nie ma w zbiorze. Robimy to przy użyciu słów: not in.
- Możemy skorzystać z funkcji len(), która nam określi liczbę elementów zbioru.
- Wreszcie możemy korzystać z pętli for i poruszać się po elementach zbioru.
Zobaczmy to na poniższym przykładzie:
Definiujemy zbiór H zawierający imiona.
Następnie sprawdzamy przy użyciu instrukcji if, czy element „Kasia” znajduje się w zbiorze H. Korzystamy ze słowa: in. jeżeli znajduje się to wyświetlany jest odpowiedni komunikat informacyjny. jeżeli nie to również informujemy o tym fakcie.
W kolejnych 4 liniach sprawdzamy, czy element „Dawid” nie występuje w zbiorze H. Korzystamy ze słów: not in. W zależności od wyniku sprawdzenia wyświetlane są odpowiednie komunikaty.
Kolejna linia to wypisanie liczby elementów zbioru (funkcja len).
Na koniec deklarujemy zmienną imionaP, która będzie przechowywać imiona zaczynające się od litery 'P’. W pętli for sprawdzamy czy poszczególne elementy zbioru H zaczynają się na szukaną literę. jeżeli tak to dopisujemy to imie do naszej zmiennej. I wyświetlamy w ostatniej linii naszego programu.
W wyniku wykonania tego fragmentu kodu otrzymaliśmy następujący wynik:
Podsumowanie
Zbiory w Pythonie są użytecznym narzędziem do przechowywania unikatowych elementów. Są niezmienne i nieuporządkowane, co sprawia, iż są efektywne w operacjach dodawania, usuwania oraz sprawdzania przynależności elementów. Ponadto, zbiory pozwalają na wykonywanie operacji typu suma, różnica i część wspólna, co czyni je przydatnymi w różnych programach. Zrozumienie i nabycie umiejętności pracy z tymi strukturami danych wzbogaci Waszą wiedzę o języku Python.