2024-07-30

Myśląc o Pythonie: Set

Dziś omówimy kolejną niesamowitą z kolekcji w języku Python, pomówimy bowiem o set w Pythonie, czyli zbiorach. Mówiąc ściślej zbiorach wartości - są nimi też listy czy słowniki, ale te zbiory są troszeczkę inne. Nie jest to bowiem zbiór par klucz-wartość. Czym więc jest set w Pythonie?

Zacznijmy od początku. W matematyce mamy zbiory, wymieniamy tam po prostu wartości obok siebie. Właśnie o takie sety z matematyki będzie Nam tutaj chodzić. Set w Pythonie to nic innego jak właśnie taki zbiór, na matmie mógł on być zamknięty lub otwarty, a tutaj po prostu jest 😉

Omówmy sobie podstawową charakterystykę setów. Set jest kolekcją unikalnych wartości, każda z wartości musi być odmienna. I to jest główna cecha tego typu kolekcji, mamy po prostu wymienione obok siebie wartości, które koniecznie muszą być unikalne. Co się stanie jeśli tak nie będzie? Przekonamy się o tym w trakcie omawiania.

Na setach możemy oczywiście wykonywać różne operacje, przykładowo jak w matematyce odszukać część wspólną zbioru, ale możemy też poszukać wartości unikalnych tylko dla jednego ze zbiorów. Oczywiście mamy do takich działań wbudowane metody, które upraszczają Nam wykonanie takich operacji, jak zaraz się przekonamy.

Podstawy setów w Pythonie

Zacznijmy od podstaw, zobaczmy sobie jak utworzyć zbiór, jak go wyświetlić, odwołać się do elementów czy użyć inszej magii. Otóż zbiór możemy wyczarować zaklęciem zbioru (no dobra, już nie śmieszkuję, to poważne), czyli set() - jest to metoda, która tworzy zbiór (jakby inaczej). Zatem utwórzmy sobie zbiór.

Twrzenie set w Pythonie

Jak możemy się przekonać powyżej, instrukcja type, mówiąca Nam o typie obiektu, objawie Nam, że typem utworzonego obiektu jest obiekt klasy set. Dobitnie więc możemy stwierdzić, że mamy utworzony pusty słownik. Co dalej? Teraz możemy wypełnić go elementami, jeszcze tylko zobaczmy jak będzie wyglądał pusty w konsoli.

Dodawanie wielu elementów do set w Pythonie

Widzimy, że Nasz słownik w wersji pustej jest wyświetlany jako słówko set z pustymi nawiasami. Zaś po użyciu metody update(), pozwalającej Nam dodać kilka elementów jednocześnie, mamy elementy w nawiasach klamrowych, trochę dziwne, ale no cóż - życie. Dobra, ale możemy też dodawać po jednym elemencie metodą add():

użycie metody add na set w Pythonie

Jak widzimy przy okazji, możemy też sobie dodać element typu string i nie będzie to żaden problem dla Naszego setu. Możemy przy okazji sprawdzić co się stanie jak dodamy element , który już jest w zbiorze, poznęcajmy się nad Naszym Matołkiem jeszcze trochę.

Dodawanie istniejącego elementu do set w Pythonie

No i pech, a raczej projektanci Pythona. Nie możemy mieć dwu Matołków w jednym słowniku. Jeden wystarczy. Słownik nie pozwala na przetrzymywanie duplikatów.

Masowe pojedynczych znaków dodawanie

Przy okazji dodawania wspomnę, że jeśli przykładowo chcielibyśmy dodać wszystkie znaki ze słowa matołek. Możemy je oczywiście wymieniać po kolei lub zrobić to w pętli iterującej po stringu.

I może efekt osiągniemy, ale warto wiedzieć, że istnieje prostsza metoda. Mianowicie jeśli użyjemy metody update i spróbujemy dodać całe słowo, to uzyskamy właśnie taki efekt jak na obrazku powyżej. Wystarczy więc metodzie update podać jeden argument mający więcej niż jedną literę, by dodał sobie każdą jako osobny element. Przy okazji zwróć uwagę, że sety nie zachowują kolejności elementów, za każdym razem jak wyświetlisz słownik, kolejność może się różnić.

Oczywiście, mimo, że w słowie umieściłem dwa razy tę samą literę. Nasz set przetrzymuje tylko jedno jej wystąpienie, bo nie będzie przechowywać duplikatu.

Usuwanie duplikatów

Dzięki istnieniu setów możemy też szybko usuwać duplikaty z innej kolekcji, jaką jest lista. Jeśli lista będzie zawierać kilka takich samych elementów, możemy ją po prostu castować na set. Co oczywiście pozwoli Nam na szybkie wycięcie powtarzających się elementów.

Pozbywanie się duplikatów przy użyciu set w Pythonie.

Jak widzimy szybko pozbyliśmy się duplikatów z Naszej listy, używając prostej konwersji na set. Proste i eleganckie rozwiązanie 🙂

Inne metody na setach w Pythonie

No, ale My ciągle o tym dodawaniu i dodawaniu, usuńmy coś. Tutaj możemy użyć jednej z kilku metod, pierwsza, którą sobie pokażemy, metodą będzie metoda pip(), która pozwoli Nam usunąć pierwszy element setu i jednocześnie go zwrócić.

stosowanie metody pop na obiekcie typu set w Pythonie

Jak powyżej możemy zauważyć, z Naszego zbioru, zniknął pierwszy z elementów, a przy okazji mogliśmy go wyświetlić. Możemy też usunąć wskazany element inną metodą. Nie zwróci Nam ona jednak tego co usuwamy (skoro podajemy co usuwamy to chyba to już wiemy).

Działania na setach w Pythonie

Jeśli przykładowo, mielibyśmy dwa obiekty typu set, w Pythonie, i nazwalibyśmy je a i b, to możemy się nimi bardziej pobawić. Jak już wspomniałem, są możliwe różne działania na setach, możemy je wykonywać poprzez użycie operatorów, ale także metod. Przykładowo możemy stworzyć UE.. znaczy unię zbiorów, czyli po prostu je połączyć ze sobą.

użycie metody union na obiekcie typu set w Pythonie

Jak możemy zauważyć, przy okazji, by podać w funkcji set Nasz słownik. Musimy umieścić go jako tablicę, bo funkcja ta nie przyjmuje więcej niż jednego argumentu. Natomiast wracając do Naszej wspaniałej unii. Możemy ją stworzyć poprzez użycie na jednym secie metody union i podanie drugiego jako argumentu. Ewentualnie możemy to zrobić poprzez użycie operatora pionowej kreski.

Podobnie sytuacja ma się z częścią wspólną, czyli znalezieniem tych elementów, które w każdym ze zbiorów są takie same. Tutaj możemy użyć metody intersection().

użycie metody intersection na obiekcie typu set w Pythonie

Jak możemy się dowiedzieć z powyższego obrazka, do znalezienia wspólnych elementów, możemy użyć też znaku amp. Skracając sobie tym samym zapis.

Różnice w setach

Jeśli chcielibyśmy znaleźć unikalne dla zbioru a elementy, czyli takie, które nie występują w zbiorze b, to w takim wypadku możemy użyć innej metody. W takim wypadku będzie Nam mogła pomóc metoda znajdująca różnicę, czyli metoda difference(), a możemy też po prostu użyć minusa.

zastosowanie metody difference na obiekcie typu set w Pythonie

No i proszę. Znaleźliśmy elementy, które występują tylko w zbiorze a, jeśli chcielibyśmy znaleźć unikalne elementy dla zbioru b, rzecz jasna, odwrócilibyśmy kolejność, w której używamy zbiorów z metodą difference. Metody tej użylibyśmy na secie b.

Możemy też pokusić się na koniec o poszukanie elementów unikalnych dla zbioru a i unikalnych dla zbioru b. Takich elementów poszukamy za pomocą tzw. symetrycznej różnicy, a metoda nosi miano symetric_difference(). Ewentualnie może być zastąpiona "daszkiem", ale wszystko zobaczymy w kodzie:

Zastosowanie metody symetric_difference na obiekcie typu set w Pythonie.

I tak oto znaleźliśmy elementy, które są unikalne dla zbioru a i elementy unikalne dla zbioru b. Znaczy to, że występujące tylko w jednym z tych zbiorów.

Jak widzimy zatem, sety to meeega pomocne i ciekawe struktury, jest to jeden z ciekawszych, dla mnie, typów kolekcji i naprawdę często może się przydać do uproszczenia Nam operacji. Do zo!

Dodaj komentarz

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram