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í.
Tuples sú read-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.
