Datové struktury

V tomto tutoriálu jsou představeny další datové struktury (kolekce) a způsob práce s nimi.

Tuple

Objekt tuple je podobný jako list. Největší rozdíl je, že tuple není možné měnit. Jelikož Tuple nemá tolik operací jako list, tak práce s ním je rychlejší. Příklad vytvoření objektu tuple následuje.


In [23]:
a = (1, 2, 3, "a") # vytvori tuple
print(a)
type(a)


(1, 2, 3, 'a')
Out[23]:
tuple

Poznámky k objektu tuple:

  • tuple je pro práci rychlejší než list
  • objekty v tuple jsou nezměnitelné (není možné měnit a přidívat objekty do tuple)
  • je možné získat objekty z tuple pomocí indexování a porcování
  • je možné používat podobné operace jako pro listy (spojení dvou objektů tuple, opakování)
  • stejně jako u objektu list, pořadí objektů v tuple je dáno

Slovník

Slovník je neseřazený kontejner na páry klíč/hodnota. Klíč zde nahrazuje index. Proto ve slovníku není pořadí (narozdíl od objektů list a tuple). Příklad následuje.


In [24]:
a = {"name":"John Doe", "age":"30"}
print(a)
print(type(a))


{'age': '30', 'name': 'John Doe'}
<class 'dict'>

Z indexování pomocí klíče vyplývá následující:

  • pokud zapíšete hodnotu ke klíči, který už existuje, hodnota je přepsána
  • pokud zapíšete hodnotu ke klíči, který neexistuje, je vytvořen tento nový pár klíč/hodnota

See examples


In [25]:
a["name"] = "Borg" # ve vytvorenem slovniku prepise hodnotu u klice name
print(a)


{'age': '30', 'name': 'Borg'}

In [26]:
a["location"] = "space" # ve vytvorenem slovniku vytvori novy par klic/hodnota
print(a)


{'location': 'space', 'age': '30', 'name': 'Borg'}

Převody mezi datovýma strukturama

Převod mezi objekty list a tuple je ukázáno na následujících příkladech.


In [27]:
a = ["a", "b", "c", "d", "e"] # ukazkovy list
a = tuple(a) # prevod na tuple
a = list(a) # zpet na list

Převod mezi slovníkem a listem (nebo tuple) není tak jednoduchý. Jednoduchý příklad následuje. Objekt obsahuje vnořené objekty, které mají přesně dvě položky. Kdyby obsahovaly jiný počet položek, konverze by nebyla možná.


In [28]:
a = [["a", 1], ["b", 2], ["c", 1]]
dict(a)


Out[28]:
{'a': 1, 'b': 2, 'c': 1}

List comprehensions a generátory

List comprehensions a generátory jsou nástroje pro usnadnějí práce při vytváření listů nebo iterování.

List comprehensions

Tato funkce je jednořádková náhrada za for smyčku. Následuje příklad.


In [29]:
x = (2, 5, 3, 5, 1, 3)
a = [2 * item for item in x] # list comprehension
print(a)


[4, 10, 6, 10, 2, 6]

Poznámka: podobné komprese je možné dělat i se slovníky.

Generátory

Generátory jsou podobné jako list comprehension. Rozdíl je v tom, že generátor nevytvoří objekt obsahující položky, ale pouze se chová jako takový objekt. Jinými slovy, chová se jako objekt přes který je možný iterovat, aniž by se celý vytvořil najednou v paměti. Z tohoto důvodu je možné generátor použít pouze jednou a pouze v jednom směru (není možné indexovat). Generátory jsou výhodné, pokud chcete ušetřit místo v paměti.


In [30]:
x = (2, 5, 3, 5, 1, 3)
a = (2 * item for item in x) # generator
print(a)


<generator object <genexpr> at 0xb47841bc>

In [31]:
for item in a:
    print(item) # vytiskne hodnotu z generatoru


4
10
6
10
2
6