Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

2. diel - Tuples a množiny v Pythone

V predchádzajúcej lekcii, Úvod do kolekcií v Pythone, sme zistili, aké sú v Pythone kolekcie.

V tomto tutoriále kolekcií v Pythone sa zameriame na tuples a množiny. Vysvetlíme si, na čo sa používajú a v čom sa od seba líšia. Popíšeme si aj základné metódy, ktoré na prácu s týmito kolekciami budeme používať.

Tuples v Pythone

Tuples (niekedy tiež usporiadané n-tice) sa veľmi podobajú zoznamom. Ide o sekvencie, v ktorých ale položky nie je možné ďalej modifikovať. Jednotlivé položky sa oddeľujú čiarkou. Deklarujeme ich pomocou okrúhlych zátvoriek:

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

Výstup:

Konzolová aplikácia
(1, 2, 3, 5)

Je tu ale malý háčik v prípade, že chceme deklarovať tuple s jedinou položkou. Aby sme ju odlíšili od bežnej hodnoty premennej, musíme za položkou napísať čiarku (,):

grade = (1)
grades = (1,)
print(grade)
print(grades)

Výstup:

Konzolová aplikácia
1
(1,)

Kolekciu tuple používame, keď potrebujeme niekde odovzdať sekvenciu a chceme sa uistiť, že sa náhodou nezmení. Tuplesread-only, takže ak potrebujeme tuple z nejakého dôvodu modifikovať, musíme vytvoriť novú s takými položkami, ktoré práve potrebujeme. To dosiahneme napríklad prevodom tuple na zoznam a zase späť:

grades = (1, 2, 3, 5)
print(grades)
grades_list = list(grades)
grades_list[1] = 4
grades = tuple(grades_list)
print(grades)

Výstup:

Konzolová aplikácia
(1, 2, 3, 5)
(1, 4, 3, 5)

V kóde je dôležitá metóda tuple() ktorá na tuple prevádza iné sekvencie. N-tice môžu byť tiež zlúčené do seba prostredníctvom operátora +. Toto platí pre akýkoľvek typ sekvencie:

grades_january = (1, 1, 4, 2)
grades_february = (5, 3, 1)
grades = grades_january + grades_february
print(grades)

Výsledok:

Konzolová aplikácia
(1, 1, 4, 2, 5, 3, 1)

To isté platí pre zoznamy. Nie je však možné kombinovať zoznamy a n-tice bez explicitného prevodu na rovnaký dátový typ.

Na zistenie, koľko položiek naša tuple obsahuje, použijeme globálnu funkciu len(). Môžeme použiť aj funkcie min() a max() na určenie najnižšej a najvyššej hodnoty (jednoducho ako pri každej sekvencii v Pythone). Môžeme tiež použiť operátor in, cyklus for, operátor [] pre indexy atď.

Množiny v Pythone

Množina alebo set je druh sekvencie podobnej zoznamu s tým rozdielom, že môže obsahovať len unikátne položky (každá položka môže byť v množine iba raz). Čo tiež zodpovedá matematickej definícii pre množiny. Tieto položky nie sú zotriedené, čo znamená že poradie položiek nie je udržiavané a môže sa nepredvídateľne zmeniť. Pre množiny nie je žiadna zvláštna syntax ako v prípade zoznamov či n-tic, vytvárame ich jednoducho použitím globálnej funkcie set(), ktorej do parametra vložíme sekvenciu (už aj existujúcu):

planets = set(("Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"))
print(planets)
planets.add("Pluto")
print(planets)
planets.add("Neptune")
print(planets)

Vo výstupe dostaneme:

Konzolová aplikácia
{'Jupiter', 'Uranus', 'Saturn', 'Mars', 'Neptune', 'Earth'}
{'Jupiter', 'Uranus', 'Saturn', 'Mars', 'Neptune', 'Earth', 'Pluto'}
{'Jupiter', 'Uranus', 'Saturn', 'Mars', 'Neptune', 'Earth', 'Pluto'}

V ukážke vyššie sme vytvorili množinu šiestich mien planét. Dvojité zátvorky na riadku s funkciou set() znamenajú, že sme odovzdali názvy planét formou n-tice ako parameter tejto funkcii. Poradie položiek nie je zoradené podľa abecedy, a nezmení sa ani po pridaní novej položky. To ale nie je žiadna chyba, pretože položky sú vnútorne udržiavané v poradí, čo pomáha množine efektívne určiť jedinečnosť každej položky.

Metódy množín

Pozrime sa na základné metódy pre operácie s množinami.

Metóda add()

Pomocou metódy add() pridávame položky do množiny. Z predchádzajúceho príkladu je zrejmé, že ak sa pokúsime pridať do množiny už raz obsiahnutý prvok, nevyskočí žiadna chyba, ale položka jednoducho nie je pridaná:

names = set(("Charles", "Linda", "Elizabeth"))
names.add("Evan")
names.add("Charles")
print(names)

Výstup:

Konzolová aplikácia
{'Charles', 'Linda', 'Elizabeth', 'Evan'}

Metódy difference() a difference_update()

Ako sa dalo čakať, množina poskytuje všetky množinové operácie, ktoré poznáme z matematických tried. Môžeme sa napríklad opýtať na rozdiel medzi dvoma množinami. Metóda difference() vracia tento rozdiel dvoch množín ako novú množinu. Metóda difference_update() naopak upravuje existujúcu množinu a odstráni všetky položky z druhej množiny:

raffle_one = {1, 2, 3, 4}
raffle_two = {3, 4, 5, 6}
difference = raffle_one.difference(raffle_two)
print(difference)
raffle_one.difference_update(raffle_two)
print(raffle_one)

Výstup:

Konzolová aplikácia
{1, 2}
{1, 2}

Metódy remove(), discard(), a pop()

Všetky z týchto troch metód odstránia vybranú položku z množiny. Metóda remove() vyhodí chybu, ak sa hľadaná položka v množine nevyskytuje. Metóda discard() sa správa úplne totožne, len pri absencii položky zamýšľanej na odstránenie chybu nevyvolá. Metóda pop() potom vyberie náhodnú hodnotu z množiny a tú potom vráti:

raffle = {5, 10, 15, 20}
raffle.remove(10)
raffle.discard(10) # does not raise an error even though 10 is no longer in the set
print(raffle.pop())
print(raffle)

Výstup:

Konzolová aplikácia
20
{5, 15}

Metóda intersection()

Táto metóda nám vypočíta prienik dvoch množín:

raffle_one = {1, 2, 3, 4, 5}
raffle_two = {3, 4, 5, 6, 7}
common_elements = raffle_one.intersection(raffle_two)
print(common_elements)

Výstup:

Konzolová aplikácia
{3, 4, 5}

Metóda isdisjoint()

Určuje, či dve množiny nemajú žiadne spoločné položky (prienik):

raffle_one = {1, 2, 3, 4, 5}
raffle_two = {6, 7, 8, 9, 10}
result = raffle_one.isdisjoint(raffle_two)
print(result)

Výstup:

Konzolová aplikácia
True

Metódy issubset() a issuperset()

Môžeme sa opýtať, či je množina podmnožinou (všetky jej položky sú prítomné v druhej množine) alebo nadmnožinou (sú v nej prítomné všetky položky druhej množiny) pomocou metód issubset() pre podmnožinu a issuperset() nadmnožinu:

raffle_one  = {1, 2, 3, 4}
raffle_two = {2, 3, 4, 5}
result_subset = raffle_one.issubset(raffle_two)
print(result_subset)
result_superset = raffle_one.issuperset(raffle_two)
print(result_superset)

Výstup:

Konzolová aplikácia
False
False

Metóda clear()

Táto metóda odstráni všetky položky z množiny (vyčistí ju):

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

Výstup:

Konzolová aplikácia
set()

V budúcej lekcii, Slovníky v Pythone, sa pozrieme na slovníky.


 

Predchádzajúci článok
Úvod do kolekcií v Pythone
Všetky články v sekcii
Kolekcie v Pythone
Preskočiť článok
(neodporúčame)
Slovníky v Pythone
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
99 hlasov
(^_^)
Aktivity