Zbiory (set)
Stronę tą wyświetlono już: 13540 razy
Zbiory tworzone są z elementów interowalnych w taki sposób, że w dany zbiorze może znaleźć się tylko jeden element o danej wartości.
Tworzenie zbioru z tekstu
Zbiory można tworzyć z tekstu, ponieważ tekst jest również elementem interowalnym:
- zbior = set("Jakiś tam przykładowy tekst")
- print(zbior)
Wynik działania:
{'p', 'ś', 'y', 'a', 'm', 'ł', ' ', 't', 'w', 'r', 'i', 'J', 'd', 'o', 'k', 'z', 'e', 's'}
Tworzenie zbioru z listy
Zbiory można tworzyć z listy:
- lista = ["dziesięć", "dziesięć", 9, 9, "jedenaście", (0, 0)]
- zbior = set(lista)
- print(zbior)
Wynik działania:
{'dziesięć', 9, (0, 0), 'jedenaście'}
Łączenie dwóch zbiorów
Za pomocą wewnętrznej metody union:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1.union(zbior2))
Wynik działania:
{'j', 's', 'm', 'ś', 'e', 'a', ' ', 'k', 't', 'i'}
Za pomocą operatora |:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1 | zbior2)
Część wspólna dwóch zbiorów
Za pomocą wewnętrznej metody intersection:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1.intersection(zbior2))
Wynik działania:
{'k', 'e', 't', 's'}
Za pomocą operatora &
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1 & zbior2)
Różnica dwóch zbiorów
Za pomocą wewnętrznej metody difference:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1.difference(zbior2))
- print(zbior2.difference(zbior1))
Wynik działania:
set() {'j', 'ś', 'a', ' ', 'm', 'i'}
Za pomocą operatora -:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1 - zbior2)
- print(zbior2 - zbior1)
Różnica symetryczna dwóch zbiorów
Za pomocą wewnętrznej metody symmetric_difference:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1.symmetric_difference(zbior2))
Wynik działania:
{'j', 'm', 'ś', 'a', ' ', 'i'}
Za pomocą operatora ^:
- zbior1 = set("tekst")
- zbior2 = set("tekst jakiś tam")
- print(zbior1 ^ zbior2)
Różnica symetryczna dwóch zbiorów to taka, gdzie dany element występuje w jednym lub w drugim zbierze, ale nie w obu na raz.
Suma dwóch zbiorów z podstawieniem
Zbiór można zsumować dwa zbiory korzystając z wewnętrznej metody update:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.update("nowy tekst do zbioru")
- print(zbior)
Wynik działania:
{'e', 'i', 'a', ' ', 'm', 't', 's', 'k', 'j', 'ś'} {'e', 'y', 'i', 'a', 'z', ' ', 'r', 'm', 't', 's', 'w', 'o', 'n', 'b', 'k', 'j', 'u', 'ś', 'd'}
Ten sam efekt można uzyskać znacznie krótszym zapisem, korzystając z operatora |=:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior |= set("nowy tekst do zbioru")
- print(zbior)
Warto zwrócić uwagę, że przy użyciu operatora |= konieczne było utworzenie zbioru z elementów tekstu za pomocą set, czego nie trzeba było robić przy użyciu metody wewnętrznej update.
Część wspólna dwóch zbiorów z podstawieniem
I znów istnieją dwa sposoby, pierwszy wykorzystuje wewnętrzną metodę intersection_update:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.intersection_update("nowy tekst do zbioru")
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} {'e', 'i', 's', 'k', 't', ' '}
Ten sam efekt można uzyskać przy wykorzystaniu operatora &=:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior &= set("nowy tekst do zbioru")
- print(zbior)
I znów, tak jak uprzednio konieczne było rzutowanie na set.
Część wspólna dwóch zbiorów z podstawieniem
Pierwszy sposób, wykorzystujący wewnętrzną metodę difference_update:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.difference_update("nowy tekst do zbioru")
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} {'ś', 'a', 'j', 'm'}
Ten sam wynik można uzyskać przy wykorzystaniu operatora -=:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior -= set("nowy tekst do zbioru")
- print(zbior)
W tym przypadku również konieczne jest rzutowanie na set.
Różnica symetryczna dwóch zbiorów z podstawieniem
Pierwszy sposób, wykorzystujący wewnętrzną metodę difference_update:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.symmetric_difference_update("nowy tekst do zbioru")
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} {'ś', 'z', 'b', 'y', 'u', 'a', 'n', 'j', 'm', 'd', 'o', 'w', 'r'}
Ten sam wynik można uzyskać przy wykorzystaniu operatora ^=:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior ^= set("nowy tekst do zbioru")
- print(zbior)
W tym przypadku również konieczne jest rzutowanie na set.
Dodawanie pojedynczego elementu do zbioru
Dodawanie elementu do
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.add("5")
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', '5', 'a', 'j', 'k', 'm', 't', ' '} {'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '}
Usuwanie pojedynczego elementu zbioru
Pierwszy sposób, za pomocą metody wewnętrznej remove:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.remove("ś")
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} {'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '}
Metoda remove ma pewną wadę, a mianowicie taką, że gdy dany element nie istnieje w zbiorze generowany jest paskudny kod błędu. Dlatego też, gdy nie ma pewności, czy dany element istnieje w zbiorze lepiej użyć metody discard, która usuwa dany element, jeśli istnieje on w zbiorze:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.discard("ś")
- zbior.discard("ś")
- print(zbior)
Kolejną metodą, która zwraca i usuwa pierwszy element zbioru jest pop:
- zbior = set("jakiś tam tekst")
- print(zbior)
- print(zbior.pop())
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} ś {'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '}
Metoda pop zwraca błąd, jeżeli zbiór jest pusty.
Opróżnianie zbioru za pomocą metody clear:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior.clear()
- print(zbior)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} set()
Kopiowanie zbioru za pomocą metody copy:
- zbior = set("jakiś tam tekst")
- print(zbior)
- zbior2 = zbior.copy()
- zbior.clear()
- print(zbior)
- print(zbior2)
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} set() {'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '}
Liczba elementów zbioru
Za pomocą funkcji len:
- zbior = set("jakiś tam tekst")
- print(len(zbior))
Wynik działania:
{'ś', 'e', 'i', 's', 'a', 'j', 'k', 'm', 't', ' '} 10
Za pomocą metody wewnętrznej __len__:
- zbior = set("jakiś tam tekst")
- print(zbior.__len__())

Tytuł:
Python w zadaniach. Programowanie dla młodzieży. Poziom podstawowy
Autor:
Urszula Wiejak, Adrian Wojciechowski

Tytuł:
Python i praca z danymi. Przetwarzanie, analiza, modelowanie i wizualizacja. Wydanie III
Autor:
Avinash Navlani, Armando Fandango, Ivan Idris

Tytuł:
Black Hat Python. Język Python dla hakerów i pentesterów. Wydanie II
Autor:
Justin Seitz, Tim Arnold

Tytuł:
Python z życia wzięty. Rozwiązywanie problemów za pomocą kilku linii kodu
Autor:
Lee Vaughan

Tytuł:
Python dla nastolatków. Projekty graficzne z Python Turtle
Autor:
Krzysztof Łos

Tytuł:
Python i Excel. Nowoczesne środowisko do automatyzacji i analizy danych
Autor:
Felix Zumstein

Tytuł:
Python dla testera
Autor:
Piotr Wróblewski

Tytuł:
Python 3. Projekty dla początkujących i pasjonatów
Autor:
Adam Jurkiewicz

Tytuł:
Machine learning, Python i data science. Wprowadzenie
Autor:
Andreas C. Müller, Sarah Guido

Tytuł:
Python na maturze. Rozwiązania i analiza wybranych zadań programistycznych
Autor:
Roland Zimek