
Python / 4. časť: Efektívny lovec
Reťazce (str)
Reťazce (strings) patria medzi tzv. zložené (compound) dátové typy, a to z dôvodu, že obsahujú viacero menších prvkov – konkrétne znakov (characters), ktoré zoskupujú do jedného celku. Objektová podoba reťazcov ponúka viacero metód, ktoré možno využiť na manipuláciu s ich obsahom. Vo vývojovom prostredí IDLE si môžeme zoznam dostupných metód vypísať stlačením tabulátora za znakom bodky.
Dôležitá je skutočnosť, že reťazce sú sekvenčné (indexovateľné) a nemeniteľné (immutable). Pokiaľ potrebujeme zmeniť existujúci reťazec, musíme to urobiť cestou vytvorenia nového reťazca.
Pretože typ string je nemeniteľný, môže sa stať, že pre dva rovnaké reťazce sa v pamäti použije to isté pamäťové miesto (ide o ten istý objekt). Kontrolu, či dve rozdielne premenné, ktorým sme priradili rovnaký reťazec, ukazujú na rovnaký objekt (rovnaké pamäťové miesto), môžeme vykonať pomocou operátora is.
Základná manipulácia s reťazcami
Na výber jedného prvku (znaku) z reťazca používame indexovací operátor [i], ktorého argumentom je pozícia znaku v reťazci počnúc od 0. Index špecifikuje umiestnenie prvku v sekvenčnom zozname údajov, v tomto prípade konkrétneho znaku. Možné sú aj tzv. negatívne indexy, pri ktorých má posledný znak reťazca index [-1], predposledný [-2]… Indexom nemusí byť iba jediné číslo, ale aj dvojica čísel oddelená znakom :, ktorú označujeme ako kúsok (slice). V takom prípade je z reťazca vybratá jeho časť nachádzajúca sa medzi prvým a druhým indexom (prvý či druhý index sa môže vynechať). Výstupom indexovacieho operátora je údaj typu reťazec aj napriek tomu, že ide iba o jediný znak. Ďalšie často využívané metódy a operátory sú:
Rozšírená manipulácia s reťazcami
Veľmi komplexná metóda, ktorá je určená na formátovanie reťazcov, je metóda format():
Vyčlenené miesta (place holders), označené ako {0}, {1}, {2}…, sa nahradia argumentmi argument1, argument2, argument3… Označenie miest môže byť štruktúrované doplnkovými symbolmi:
Príklad č. 4
Tuple
Typ tuple sa používa na zoskupenie údajov rôznych typov do jedného celku, čím vzniká tzv. záznam (record). Záznam ohraničený jednoduchými zátvorkami obsahuje položky, resp. údaje oddelené čiarkami, ktoré patria jednej entite. S premennými typu tuple môžeme vykonávať rovnaké operácie, aké sú definované pre typ string. Tuple sú rovnako ako reťazce nemeniteľné a s výhodou ich možno použiť ako návratový typ funkcií, keď namiesto jedinej hodnoty dokážeme vrátiť hneď niekoľko rôznych údajov. Môžeme ich vnárať jeden do druhého, čím dokážeme vytvárať veľmi sofistikované záznamy.
Priradenie
Python dokáže s premennými typu tuple realizovať efektívne priraďovanie (tuple assignment). Treba pritom prispôsobiť počet priraďovaných položiek priraďovaným premenným. V podstate ide o naplnenie premenných nachádzajúcich sa na ľavej strane priraďovacieho operátora údajmi, ktoré sú obsahom premennej typu tuple nachádzajúcej sa na jeho pravej strane:
List
List je sekvenčné zoskupenie položiek (items), resp. elementov rôznych typov do jedného celku, ktorý ohraničujeme hranatými zátvorkami. Rovnako ako typ tuple môžeme vytvárať vnorené (nested) listy, kde je jeden list položkou iného listu. Na získanie konkrétnej položky listu používame rovnaký indexovací operátor ako v prípade typu string. Mnohé ďalšie metódy a operátory typu string, ako napr. len(), for element in list, in, not in…, sú adekvátne použiteľné aj v prípade typu list. Operátor + sa používa na spájanie (concatenate) a operátor * na opakovanie listov.
Najdôležitejší rozdiel typu list oproti typom string a tuple je ten, že typ list je meniteľný (mutable). To znamená, že jednotlivé položky premennej typu list môžeme kedykoľvek zmeniť. Pre typ list je navyše definovaná metóda del(), pomocou ktorej môžeme konkrétne položky zmazať.
List aliasing a klonovanie
Z dôvodu, že typ list je meniteľný, pre dva rovnaké listy nikdy nebude vyhradené rovnaké pamäťové miesto, čo je v kontraste s typmi string a tuple. No ak priradíme jednu premennú typu list inej premennej typu list, obe budú ukazovať na rovnaké pamäťové miesto. Vytvoríme tak alias, čo znamená, že len čo zmeníme niektorú položku jednej premennej, rovnako sa zmení tá istá položka aj pri druhej premennej. To platí aj pre používanie typov list ako argumentov volaných funkcií.
V prípade, ak chceme priradiť jednu premennú typu list inej premennej bez odkazu na to isté pamäťové miesto, robíme tak pomocou operátora slice. V takom prípade sa vždy vytvorí (naklonuje) nový list (nový objekt), na ktorý bude ukazovať druhá premenná:
Príklad č. 5
Pri práci s typom list sa často používa funkcia enumerate() a metódy ako napr.