Výuka IT

Množiny

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.

Základní vlastnosti množin

Množiny v Pythonu mají několik klíčových vlastností, které je odlišují od jiných datových struktur:

Vytvoření množiny

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().

Přístup k prvkům v množině

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
      

Manipulace s množinami

Množiny nabízejí řadu metod pro přidávání a odebírání prvků. Pojďme si je podrobně projít.

Přidání prvku

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
      

Přidání více prvků

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'}
      

Odebrání prvku

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'}
      

Operace s množinami

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í (union)

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 (intersection)

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 (difference)

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 (symmetric difference)

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

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ý
      

Výhody a nevýhody množin

Výhody

Nevýhody

Praktické využití množin

Množiny mají široké uplatnění v programování. Zde je několik příkladů:

Procvičování

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.