# n-tice sa definujú ohraničením prvkov do zátvoriek () oddelených ,
t = (1, "two", True) # n-tice môžu obsahovať hodnoty rôznych typov
# zoznam môžete previesť na n-ticu funkciou tuple
t = tuple([1, "two", True])
# indexovanie je rovnaké ako pri zoznamoch alebo reťazcoch
t[0:2] # = (1, "two") - rozsah vráti n-ticu
# na rozdiel od zoznamov, prvky nemožno meniť (zápis t[index] = hodnota skončí chybou TypeError)
# n-tice je možné „rozbaliť“ do viacerých premenných v jednom riadku
x,y,z = t # x = 1, y = "two", z = True - počet premenných musí zodpovedať počtu prvkov n-tice
# môžete vytvoriť aj prázdnu n-ticu a vnorené n-tice
empty = ()
t = (1, ("two", "three"), (4, "five", 6))
t[1][1] # = ‘three’
# zvláštny zápis je pri definovaní n-tice s jedným prvkom
# nestačí iba zadať jeden prvok do zátvoriek, ale za hodnotu musíte zapísať čiarku
singleton = ("one",)
# počet hodnôt v n-tici môžete zistiť funkciou len
len(singleton) # = 1
Množiny¶
Množiny sú neusporiadané kolekcie v ktorých sa každý prvok môže vyskytovať iba raz. Používajú sa napr. na odstránenie duplicitných hodnôt zo zoznamov. Vytvárajú sa napr. funkciou set([zoznam])
.
basket = ["apple", "orange", "apple"]
fruits = set(basket)
print(fruits) # vypíše set([‘orange’,’apple’]) bez duplicitnej hodnoty ‘apple’
# nie je definované v akom poradí sú hodnoty množiny usporiadané!
# množiny sú objekty s metódami, napr.:
fruits.add("banana") # metóda add pridá ďalšiu hodnotu do množiny (ak tam už nie je)
fruits.remove("orange") # remove odstráni hodnotu z množiny
# otestovať, či množina obsahuje daný prvok môžete cez operátor in
"apple" in fruits # = True
# počet prvkov v množine vypíšete cez funkciu len
len(fruits) # = 2
# môžete vytvoriť aj prázdnu množinu
empty = set()
# množiny podporujú bežné množinové operácie ako napr.:
a = set([1, 2, 3])
b = set([2, 3, 4])
c = a | b # zjednotenie (c obsahuje prvky, ktoré sa vyskytli v a alebo b)
c = a & b # prienik (c obsahuje prvky, ktoré sa vyskytli v a a zároveň v b)
c = a - b # rozdiel (c obsahuje iba prvky z a ktoré sa nevyskytujú v b)
Viac o množinách si môžete prečítať tu (v angličtine).
Mapy/slovníky¶
Mapy (v Pythone označované ako slovníky, anglicky dictionary) sú neusporiadané kolekcie dvojíc [kľúč : hodnota]
, pričom každý kľúč sa môže vyskytovať v kolekcii iba raz. Ako kľúč môžete použiť dátové hodnoty (čísla, reťazce a Boolovské hodnoty) a nemenné objekty (napr. n-tice zložené z dátových hodnôt a nemenných objektov).
# mapy sa definujú zápisom dvojíc kľúč : hodnota oddelených , medzi zátvorky {}
tel = {"jack": 1234, "john": 2345}
# k hodnotám sa pristupuje indexovaním podľa kľúča
# na rozdiel od zoznamov alebo n-tíc, okrem čísel môžete ako kľúč použiť napr. reťazce, alebo nemenné objekty
tel["jack"] # = 1234
# ak sa pokúsite pristupovať k neexistujúcemu kľúču, príkaz skončí chybou KeyError
# ak chcete otestovať či daný kľúč v mape existuje, použite operátor in
"jack" in tel # = True
tel["hannah"] = "123abc" # môžete pridať hodnotu pre nový kľúč, alebo zmeniť hodnotu existujúceho
# hodnoty a kľúče môžu mať rôzny typ (napr. jeden kľúč číslo a druhý kľúč reťazec a pod.)
# kľúč a jeho hodnotu odstránite cez del
del tel["jack"]
empty = {} # môžete definovať aj prázdnu mapu
# počet dvojíc zistíte pomocou funkcie len
len(tel)
# metóda keys() vráti neusporiadaný zoznam všetkých existujúcich kľúčov
print(tel.keys()) # vypíše [’hannah’, ’john’]
Čas a dátumy¶
Okrem dátových hodnôt a kolekcií poskytuje Python aj ďalšie objekty pre reprezentáciu rôznych typov dát. Užitočné sú napr. typy pre reprezentáciu času a dátumu. Tieto typy nie sú priamo zabudované do jazyka Python, ale sú súčasťou samostatného modulu s názvom datetime
. Ak ich chcete vo svojom programe využívať, musíte ich naimportovať príkazom from [názov modulu] import [názov typu]
.
# z modulu ‘datetime’ naimportujeme typy pre reprezentáciu času a dátumu ‘time’ a ‘datetime’
from datetime import time
from datetime import datetime # ‘datetime’ je názov modulu aj typu
# objekt pre reprezentáciu času vytvoríte funkciou time(hodina, minúta, sekunda, mikrosekunda)
t = time(12) # čas 12:00:00 – ak vynecháte niektoré atribúty, budú doplnené 0 hodnotou
# okrem metód môžu mať objekty definované aj dátové atribúty
# pre typ ‘time’ sú definované atribúty hour, minute, second a microsecond
print("{0:02d}:{1:02d}".format(t.hour, t.minute)) # vypíše 12:00
# formátovanie {x:02d} doplní reťazec aspoň na dĺžku 2 znakom ‘0’
# (pre formátovanie dátumov si pozrite ďalej aj formátovanie pomocou metódy strftime)
# objekt pre reprezentáciu dátumu a času môžete vytvoriť funkciou datetime(rok, mesiac, deň, hodina, minúta, sekunda, mikrosekunda)
dt = datetime(2017, 1, 31) # čas môžete vynechať a doplní sa 00:00:00
# objekt datetime má definované atribúty year, month, day, hour, minut, second a microsecond
# ak chcete vypísať deň v týždni, použite metódu isoweekday()
print(dt.isoweekday()) # = 2 - utorok, hodnoty sú 1 pre pondelok až 7 pre nedeľu
# všimnite si rozdiel medzi atribútmi objektu (napr. dt.year) a metódami
# pri metódach bez parametrov musíte za menom uviesť prázdne zátvorky, napr. dt.isoweekday()
# ak chcete získať aktuálny dátum a čas použite funkciu datetime.now()
now = datetime.now()
# ak chcete získať iba aktuálny čas, použite metódu time() objektu datetime
tnow = datetime.now().time() # zreťazené volanie v jednom riadku
# dátum a čas môžete načítať z reťazca metódou datetime.strptime(reťazec, formát)
dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
# formátovací reťazec obsahuje značky začínajúce znakom % ktoré vymedzujú jednotlivé časové a dátumové polia, napr.:
# %d - deň v mesiaci [01-31]
# %m - číslo mesiaca v roku [01-12]
# %y - rok bez storočia [00-99]
# %Y - celý rok
# %H - hodina [00-23]
# %M - minúta [00-59]
# ostatné znaky formátu sa musia rovnako vyskytovať vo vstupnom reťazci, napr. medzera za rokom a /medzi mesiacom, dňom a rokom
# formátovací reťazec môžete využiť aj pri formátovaní objektu ‘datetime‘ na reťazec
print(dt.strftime("%H:%M %d.%m %Y")) # vypíše ’16:30 21.11 2006’
Úlohy¶
Úloha 4.1¶
Do premennej data
priraďte mapu, kde kľúč bude názov stĺpca v nasledujúcej tabuľke (napr. Name
atď.) a hodnota bude zoznam všetkých hodnôt v danom stĺpci.
Name | Position | Salary |
---|---|---|
John | tester | 1500 |
Jack | developer | 2500 |
Hannah | CEO | 105000 |
Jane | data scientist | 3500 |
Potom v cykle vypíšte hodnoty pre všetky stĺpce na treťom riadku (záznam o Hannah).
Úloha 4.2¶
Pomocou množiny odstráňte z nasledujúceho zoznamu duplicitné hodnoty a vypíšte prvky podľa abecedy.
basket = ["apple", "orange", "apple", "pear", "orange", "apple", "banana", "banana", "avocado"]
Úloha 4.3¶
Pomocou mapy v cykle spočítajte koľkokrát sa vyskytovali v nasledujúcom zozname rôzne hodnoty a vypíšte zoznam rôznych hodnôt a ich početnosti.
basket = ["apple", "orange", "apple", "pear", "orange", "apple", "banana", "banana", "avocado"]
Úloha 4.4¶
Vypíšte aktuálny čas vo formáte [hodina 00-23]:[minúta 00-59]
a aktuálny deň v týždni (napr. pondelok, utorok, atď.)
Úloha 4.5¶
Na vstupe máte zadaný nasledujúci text:
text = """Bridgekeeper: Hee hee heh. Stop. What... is your name?
King Arthur: It is 'Arthur', King of the Britons.
Bridgekeeper: What... is your quest?
King Arthur: To seek the Holy Grail.
Bridgekeeper: What... is the air-speed velocity of an unladen swallow?
King Arthur: What do you mean? An African or European swallow?"""
Napíšte skript, ktorý:
- Rozdelí text na riadky a slová. Slová prevedie na malé písmená a odstráni z textu diakritiku (' ... ?).
- Vypíše zoznam slov usporiadaný podľa abecedy s frekvenciami, koľkokrát slovo povedal kráľ Arthur, koľkokrát strážca mostu a aká bola frekvencia celkovo, napr.:
african 1 0 1
air-speed 1 0 0
an 1 1 2
arthur 1 0 1
...