NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Lekce 2 - Tuples a množiny v Pythonu

V předchozí lekci, Úvod do kolekcí v Pythonu, jsme zjistili, jaké jsou v Pythonu kolekce.

V tomto tutoriálu kolekcí v Pythonu se zaměříme na tuples a množiny. Vysvětlíme si, k čemu se používají a čím se od sebe liší. Popíšeme si také základní metody, které k práci s těmito kolekcemi budeme používat.

Tuples v Pythonu

Tuples (někdy též uspořádané n-tice) se velmi podobají seznamům. Jedná se o sekvence, ve kterých ale položky nelze dále modifikovat. Jednotlivé položky se oddělují čárkou. Deklarujeme je pomocí kulatých závorek:

znamky = (1, 2, 3, 5)
print(znamky)

Výstup:

Konzolová aplikace
(1, 2, 3, 5)

Je tu ale malý háček v případě, že chceme deklarovat tuple s jedinou položkou. Abychom ji odlišili od běžné hodnoty proměnné, musíme za položkou napsat čárku (,):

znamka = (1)
znamky = (1,)
print(znamka)
print(znamky)

Výstup:

Konzolová aplikace
1
(1,)

Kolekci tuple používáme, když potřebujeme někde předat sekvenci a chceme se ujistit, že se náhodou nezmění. Tuples jsou read-only, takže pokud potřebujeme tuple z nějakého důvodu modifikovat, musíme vytvořit novou s takovými položkami, které zrovna potřebujeme. Toho dosáhneme například převodem tuple na seznam a zase zpět:

znamky = (1, 2, 3, 5)
print(znamky)
znamky_seznam = list(znamky)
znamky_seznam[1] = 4
znamky = tuple(znamky_seznam)
print(znamky)

Výstup:

Konzolová aplikace
(1, 2, 3, 5)
(1, 4, 3, 5)

V kódu je důležitá metoda tuple() která na tuple převádí jiné sekvence. N-tice mohou být také sloučeny do sebe prostřednictvím operátoru +. Toto platí pro jakýkoliv typ sekvence:

znamky_leden = (1, 1, 4, 2)
znamky_unor = (5, 3, 1)
znamky = znamky_leden + znamky_unor
print(znamky)

Výsledek:

Konzolová aplikace
(1, 1, 4, 2, 5, 3, 1)

Totéž platí pro seznamy. Nelze však kombinovat seznamy a n-tice bez explicitního převodu na stejný datový typ.

Ke zjištění, kolik položek naše tuple obsahuje, použijeme globální funkci len(). Můžeme použít i funkce min() a max() pro určení nejnižší a nejvyšší hodnoty (prostě jako u každé sekvence v Pythonu). Můžeme také použít operátor in, cyklus for, operátor [] pro indexy atd.

Množiny v Pythonu

Množina neboli set je druh sekvence podobné seznamu s tím rozdílem, že může obsahovat jen unikátní položky (každá položka může být v množině pouze jednou). Což také odpovídá matematické definici pro množiny. Tyto položky nejsou setříděné, což znamená že pořadí položek není udržováno a může se nepředvídatelně změnit. Pro množiny není žádná zvláštní syntaxe jako v případě seznamů či n-tic, vytváříme je jednoduše použitím globální funkce set(), které do parametru vložíme sekvenci (i již existující):

planety = set(("Země", "Mars", "Jupiter", "Saturn", "Uran", "Neptun"))
print(planety)
planety.add("Pluto")
print(planety)
planety.add("Neptun")
print(planety)

Ve výstupu dostaneme:

Konzolová aplikace
{'Jupiter', 'Uran', 'Saturn', 'Mars', 'Neptun', 'Země'}
{'Jupiter', 'Uran', 'Saturn', 'Mars', 'Neptun', 'Země', 'Pluto'}
{'Jupiter', 'Uran', 'Saturn', 'Mars', 'Neptun', 'Země', 'Pluto'}

V ukázce výše jsme vytvořili množinu šesti jmen planet. Dvojité závorky na řádku s funkcí set() znamenají, že jsme předali názvy planet formou n-tice jako parametr této funkci. Pořadí položek není seřazeno podle abecedy, a nezmění se ani po přidání nové položky. To ale není žádná chyba, neboť položky jsou vnitřně udržovány v pořadí, což pomáhá množině efektivně určit jedinečnost každé položky.

Metody množin

Podívejme se na základní metody pro operace s množinami.

Metoda add()

Pomocí metody add() přidáváme položky do množiny. Z předchozího příkladu je zřejmé, že pokud se pokusíme přidat do množiny již jednou obsažený prvek, nevyskočí žádná chyba, ale položka prostě není přidána:

jmena = set(("Karel", "Lida", "Alzbeta"))
jmena.add("Ivo")
jmena.add("Karel")
print(jmena)

Výstup:

Konzolová aplikace
{'Karel', 'Lida', 'Alzbeta', 'Ivo'}

Metody difference() a difference_update()

Jak se dalo čekat, množina poskytuje všechny množinové operace, které známe z matematických tříd. Můžeme se třeba zeptat na rozdíl mezi dvěma množinami. Metoda difference() vrací tento rozdíl dvou množin jako novou množinu. Metoda difference_update() naproti tomu upravuje stávající množinu a odstraní všechny položky z druhé množiny:

losovani_jedna = {1, 2, 3, 4}
losovani_dva = {3, 4, 5, 6}
rozdil = losovani_jedna.difference(losovani_dva)
print(rozdil)
losovani_jedna.difference_update(losovani_dva)
print(losovani_jedna)

Výstup:

Konzolová aplikace
{1, 2}
{1, 2}

Metody remove(), discard(), a pop()

Všechny z těchto tří metod odstraní vybranou položku z množiny. Metoda remove() vyhodí chybu, pokud se hledaná položka v množině nevyskytuje. Metoda discard() se chová zcela totožně, jen při absenci položky zamýšlené k odstranění chybu nevyvolá. Metoda pop() pak vyjme náhodnou hodnotu z množiny a tu potom vrátí:

losovani = {5, 10, 15, 20}
losovani.remove(10)
losovani.discard(10) # nevyvolá chybu, přestože hodnota 10 už v množině není
print(losovani.pop())
print(losovani)

Výstup:

Konzolová aplikace
20
{5, 15}

Metoda intersection()

Tato metoda nám vypočítá průnik dvou množin:

losovani_jedna = {1, 2, 3, 4, 5}
losovani_dva = {3, 4, 5, 6, 7}
spolecne_prvky = losovani_jedna.intersection(losovani_dva)
print(spolecne_prvky)

Výstup:

Konzolová aplikace
{3, 4, 5}

Metoda isdisjoint()

Určuje, zda dvě množiny nemají žádné společné položky (průnik):

losovani_jedna = {1, 2, 3, 4, 5}
losovani_dva = {6, 7, 8, 9, 10}
vysledek = losovani_jedna.isdisjoint(losovani_dva)
print(vysledek)

Výstup:

Konzolová aplikace
True

Metody issubset() a issuperset()

Můžeme se zeptat, zda je množina podmnožinou (všechny její položky jsou přítomny v druhé množině) nebo nadmnožinou (jsou v ní přítomny všechny položky druhé množiny) pomocí metod issubset() pro podmnožinu a issuperset() nadmnožinu:

losovani_jedna = {1, 2, 3, 4}
losovani_dva = {2, 3, 4, 5}
vysledek_subset = losovani_jedna.issubset(losovani_dva)
print(vysledek_subset)
vysledek_superset = losovani_jedna.issuperset(losovani_dva)
print(vysledek_superset)

Výstup:

Konzolová aplikace
False
False

Metoda clear()

Tato metoda odstraní všechny položky z množiny (vyčistí ji):

losovani_jedna = {1, 2, 3, 4, 5, 6}
losovani_jedna.clear()
print(losovani_jedna)

Výstup:

Konzolová aplikace
set()

V příští lekci, Slovníky v Pythonu, se podíváme na slovníky.


 

Předchozí článek
Úvod do kolekcí v Pythonu
Všechny články v sekci
Kolekce v Pythonu
Přeskočit článek
(nedoporučujeme)
Slovníky v Pythonu
Článek pro vás napsal gcx11
Avatar
Uživatelské hodnocení:
607 hlasů
(^_^)
Aktivity