Nauč se Python > Kurzy > Začátečnický kurz Pyladies (Mergado) > Datové typy > N-tice

N-tice #

Když už známe seznam, podívejme se na jeho sestřičku: takzvanou n-tici (angl. tuple).

N-tice může, podobně jako seznam, obsahovat n prvků. N-tice se dvěma prvky je dvojice neboli pár (angl. pair); se třemi prvky trojice (angl. 3-tuple), se čtyřmi čtveřice (angl. 4-tuple), atd.

Pro úplnost: existují i n-tice s jedním prvkem (hmm… „jednice”?) a s nula prvky (prázdné n-tice, angl. empty tuple), ale ty se v praxi tolik nepoužívají.

N-tice se tvoří jako seznamy, jen kolem sebe nemají hranaté závorky. Stačí čárky mezi prvky:

dvojice = 'Pat', 'Mat'
print(dvojice)

Chovají se skoro stejně jako seznamy, jen nejdou měnit. Nemají tedy metody jako append a pop a nedá se jim přiřazovat do prvků (např. ntice[1] = 2). Dají se ale použít v cyklu for a dají se z nich číst jednotlivé prvky (např. print(ntice[1])).

osoby = 'máma', 'teta', 'babička'
for osoba in osoby:
    print(osoba)

prvni = osoby[0]
print(f'První je {prvni}')

Vypadá to povědomě? Aby ne! N-tice jsme už použili dříve: for pozdrav in 'Ahoj', 'Hello', 'Ciao': ve skutečnosti používá n-tici.

Python umí ještě jeden trik: pokud chceš přiřadit do několika proměnných najednou, stačí je na levé straně rovnítka oddělit čárkou a na pravou stranu dát nějakou „složenou” hodnotu – třeba právě n-tici.

x, o = 'xo'
jedna, dva, tri = [1, 2, 3]

Funkce, které vracejí n-tice #

zip je zajímavá funkce. Používá se ve for cyklech, podobně jako funkce range, která „dává” čísla.

Když funkce zip dostane dva seznamy (či jiné věci použitelné ve for), „dává” dvojice, a to tak, že nejdřív spáruje první prvek jednoho seznamu s prvním prvkem druhého seznamu, pak druhý s druhým, třetí s třetím a tak dál.

Hodí se to, když máš dva seznamy se stejnou strukturou – příslušné prvky k sobě „patří” a chceš je zpracovávat společně:

osoby = 'máma', 'teta', 'babička', 'vrah'
vlastnosti = 'hodná', 'milá', 'laskavá', 'zákeřný'
for osoba, vlastnost in zip(osoby, vlastnosti):
    print(f'{osoba} je {vlastnost}')

Když zip dostane tři seznamy, bude tvořit trojice, ze čtyř seznamů nadělá čtveřice a tak dále.

Další funkce, která vrací dvojice, je enumerate. Jako argument bere seznam (či jinou věc použitelnou ve for) a vždy spáruje index (pořadí v seznamu) s příslušným prvkem. Jako první tedy dá (0, první prvek seznamu), potom (1, druhý prvek seznamu), (2, třetí prvek seznamu) a tak dále.

prvocisla = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

for i, prvocislo in enumerate(prvocisla):
    print(f'Prvočíslo č.{i} je {prvocislo}')

Malé n-tice #

Jak vytvořit n-tici s žádným nebo jedním prvkem? Takhle:

prazdna_ntice = ()
jednoprvkova_ntice = ('a', )

Druhý příklad jde i bez závorek – jednoprvkova_ntice = 'a', – ale to vypadá jako zapomenutá čárka. Když budeš opravdu potřebovat jednoprvkovou n-tici, radši ji pro přehlednost ozávorkuj.

Kdy použít seznam a kdy n-tici? #

Seznamy se používají, když předem nevíš, kolik v nich přesně bude hodnot, nebo když je hodnot mnoho. Například seznam slov ve větě, seznam účastníků soutěže, seznam tahů ve hře nebo seznam karet v balíčku. Oproti tomu for pozdrav in 'Ahoj', 'Hello', 'Hola', 'Hei', 'SYN': používá n-tici.

Když se počet prvků může v průběhu programu měnit, určitě sáhni po seznamu. Příklad budiž seznam přihlášených uživatelů, nevyřešených požadavků, karet v ruce nebo položek v inventáři.

N-tice se často používají na hodnoty různých typů, kdy má každá „pozice” v n-tici úplně jiný význam. Například seznam můžeš použít na písmena abecedy, ale dvojice „podíl a zbytek“ je n-tice.

Prázdné n-tice a n-tice s jedním prvkem se zapisují trochu divně a má to své důvody: může-li nastat situace, kdy takovou sekvenci budeš potřebovat, většinou je lepší sáhnout po seznamu. Například seznam hracích karet v ruce nebo seznam lidí aktuálně sledujících video může být občas prázdný.

Seznamy i n-tice mají i technické limity: n-tice nejdou měnit a až se naučíš pracovat se slovníky, zjistíš že seznamy tam nepůjdou použít jako klíče. V takových případech je potřeba použít ten druhý typ sekvence.

Často není úplně jasné, který typ použít. V takovém případě je to pravděpodobně jedno.


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.