Množiny v Pythonu jsou jednou z nejdůležitějších datových struktur, které nám umožňují pracovat s kolekcemi unikátních prvků. Na rozdíl od seznamů nebo n-tic, množiny neobsahují duplicitní prvky a nejsou uspořádané, což je činí ideálními pro situace, kdy potřebujeme zajistit jedinečnost dat nebo provádět matematické operace jako sjednocení, průnik či rozdíl. V této lekci se naučíme, jak vytvářet množiny, manipulovat s nimi a využívat jejich vlastnosti v praxi.
Množiny v Pythonu mají několik klíčových vlastností, které je odlišují od jiných datových struktur:
Množinu můžeme vytvořit dvěma způsoby: pomocí složených závorek {} nebo pomocí
konstruktorPortal/Thinking traceu set(). Podívejme se na příklady:
# Vytvoření množiny pomocí složených závorek
ovoce = {"jablko", "banán", "pomeranč"}
# Vytvoření množiny pomocí set()
cisla = set([1, 2, 3, 4, 5])
# Vytvoření prázdné množiny
prazdna_mnozina = set() # Pozor: {} vytvoří prázdný slovník, ne množinu!
Poznámka: Pokud použijeme prázdné složené závorky {}, vytvoříme prázdný slovník, nikoli množinu.
Pro prázdnou množinu použijme set().
Množiny nepodporují indexování, protože jsou neuspořádané. Nemůžeme tedy přistupovat k prvkům pomocí indexů
jako u seznamů. Místo toho můžeme použít operátor in pro kontrolu, zda je prvek v množině obsažen.
ovoce = {"jablko", "banán", "pomeranč"}
print("banán" in ovoce) # Výstup: True
print("hruška" in ovoce) # Výstup: False
Množiny nabízejí řadu metod pro přidávání a odebírání prvků. Pojďme si je podrobně projít.
Pro přidání jednoho prvku použijme metodu .add(). Pokud prvek již v množině je, nic se nestane,
protože množiny neobsahují duplicity.
ovoce = {"jablko", "banán"}
ovoce.add("pomeranč")
print(ovoce) # Výstup: {'jablko', 'banán', 'pomeranč'}
ovoce.add("jablko") # Nic se nestane, protože "jablko" již existuje
Pro přidání více prvků najednou použijme metodu .update(), která přijímá iterovatelný objekt
(např. seznam, n-tici nebo jinou množinu).
ovoce.update(["hruška", "kiwi"])
print(ovoce) # Výstup: {'jablko', 'banán', 'pomeranč', 'hruška', 'kiwi'}
Pro odebrání prvku můžeme použít metodu .remove() nebo .discard(). Rozdíl je v tom,
že .remove() vyvolá chybu, pokud prvek neexistuje, zatímco .discard() ne.
ovoce.remove("banán")
print(ovoce) # Výstup: {'jablko', 'pomeranč', 'hruška', 'kiwi'}
# Pokud prvek neexistuje:
# ovoce.remove("malina") # Vyvolá KeyError
ovoce.discard("malina") # Nic se nestane
Pro odstranění a vrácení libovolného prvku použijme metodu .pop(). Jelikož množiny jsou
neuspořádané, nevíme, který prvek bude odstraněn.
odstraneny_prvek = ovoce.pop()
print(odstraneny_prvek) # Např. 'jablko'
print(ovoce) # Např. {'pomeranč', 'hruška', 'kiwi'}
Množiny v Pythonu podporují matematické operace jako sjednocení, průnik, rozdíl a symetrický rozdíl. Tyto operace můžeme provádět pomocí metod nebo operátorů.
Sjednocení dvou množin vrátí novou množinu obsahující všechny prvky z obou množin bez duplicit.
A = {1, 2, 3}
B = {3, 4, 5}
sjednoceni = A.union(B) # Nebo A | B
print(sjednoceni) # Výstup: {1, 2, 3, 4, 5}
Průnik dvou množin vrátí novou množinu obsahující pouze prvky, které jsou v obou množinách.
prunik = A.intersection(B) # Nebo A & B
print(prunik) # Výstup: {3}
Rozdíl dvou množin vrátí novou množinu obsahující prvky, které jsou v první množině, ale ne ve druhé.
rozdil = A.difference(B) # Nebo A - B
print(rozdil) # Výstup: {1, 2}
Symetrický rozdíl vrátí novou množinu obsahující prvky, které jsou v jedné z množin, ale ne v obou.
sym_rozdil = A.symmetric_difference(B) # Nebo A ^ B
print(sym_rozdil) # Výstup: {1, 2, 4, 5}
Frozen sets jsou neměnné verze množin. Jakmile je vytvoříme, nemůžeme do nich přidávat ani z nich odebírat prvky. Jsou užitečné, když potřebujeme množinu, která se nemění, například jako klíč v slovníku.
frozen = frozenset([1, 2, 3])
# frozen.add(4) # Vyvolá AttributeError, protože frozen set je neměnný
Množiny mají široké uplatnění v programování. Zde je několik příkladů:
seznam = [1, 2, 2, 3, 4, 4, 5]
unikatni = set(seznam) # {1, 2, 3, 4, 5}
povolene_znacky = {"Škoda", "BMW", "Audi"}
if "BMW" in povolene_znacky:
print("Znacka je povolena")
uzivatele1 = {"Anna", "Jan", "Eva"}
uzivatele2 = {"Jan", "Petr", "Karel"}
spolecni = uzivatele1 & uzivatele2 # {"Jan"}
Nyní, když máme pevné teoretické základy, je čas si vše vyzkoušet v praxi. Níže najdeme odkazy na procvičování a kvíz, které nám pomohou upevnit znalosti.