V tomto článku se naučíme klíčové rozdíly mezi List a Tuples a jak používat tyto dvě datové struktury.
Seznamy a n-tice ukládají jeden nebo více objektů nebo hodnot v určitém pořadí. Objekty uložené v seznamu nebo n-tici mohou být jakéhokoli typu, včetně typu nic definovaného klíčovým slovem Žádné.
Seznamy a n-tice jsou si ve většině kontextů podobné, ale existují určité rozdíly, které v tomto článku najdeme.
Rozdíly v syntaxi
Syntaxe seznamu a n-tice se mírně liší. Seznamy jsou obklopeny hranatými závorkami ()
a n-tice jsou obklopeny závorkami ()
.
Příklad 1.1: Vytvoření seznamu vs. Vytvoření n-tice
list_num = (1,2,3,4) tup_num = (1,2,3,4) print(list_num) print(tup_num)
Výstup:
(1,2,3,4) (1,2,3,4)
Nahoře jsme definovali proměnnou nazvanou list_num, která obsahuje seznam čísel od 1
do 4
. Seznam je ohraničen závorkami ()
. Také jsme definovali proměnnou tup_num; který obsahuje n-tici čísla od 1
do 4
. N-tice je obklopena závorkami ()
.
V pythonu máme type()
funkci, která udává typ vytvořeného objektu.
Příklad 1.2: Najděte typ datové struktury pomocí funkce type ()
type(list_num) type(tup_num)
Výstup:
seznam n-tice
Mutable List vs Immutable Tuples
Seznam má proměnlivou povahu, tj. Seznam lze po vytvoření změnit nebo upravit podle potřeb, zatímco n-tice má neměnnou povahu, tj. N-tici nelze po vytvoření změnit ani upravit.
Příklad 2.1: Upravit položku Seznam vs. Tuple
list_num(2) = 5 print(list_num) tup_num(2) = 5
Výstup:
(1,2,5,4) Traceback (poslední hovor poslední): Soubor "python", řádek 6, v TypeError: objekt 'tuple' nepodporuje přiřazení položky
Ve výše uvedeném kódu jsme přiřadili 5
list_num v indexu 2
a našli jsme 5
index 2
v výstupu. Také jsme přiřadili 5
tup_num v indexu 2
a dostali jsme type error
. Ticiu nemůžeme upravit kvůli její neměnné povaze.
Poznámka: Jelikož je n-tice neměnná, mají pevnou velikost a velikost seznamu je proměnlivá.
Dostupné operace
Seznamy mají více vestavěné funkce než funkce n-tice. Můžeme použít dir((object))
vestavěnou funkci k získání všech přidružených funkcí pro seznam a n-tici.
Příklad 3.1: Seznam adresářů
dir(list_num)
Výstup:
('__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit____,' __getitem__ __gt__ ',' __hash__ ',' __iadd__ ',' __imul__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__'__, '__new , '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'připojit', 'vymazat copy ',' count ',' extend ',' index ','insert ',' pop ',' remove ',' reverse ',' sort ')
Příklad 3.2: Tuple Directory
dir(tup_num)
Výstup:
('__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewar __gt__ ',' __hash__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__ ',' __new__ ',' __reduce__ ',' __red , '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index')
Jasně vidíme, že se seznamem přes n-tici je spojeno tolik dalších funkcí. Můžeme provést operaci vkládání a vyskakování, odebírání a třídění prvků v seznamu pomocí vestavěných funkcí, které v Tuple nejsou k dispozici.
Porovnání velikosti
Operace Tuples má menší velikost než seznam, což je o něco rychlejší, ale není toho tolik, o čem bychom se zmínili, dokud nebudete mít obrovské množství prvků.
Příklad 5.1: Vypočítejte velikost List vs. Tuple
a= (1,2,3,4,5,6,7,8,9,0) b= (1,2,3,4,5,6,7,8,9,0) print('a=',a.__sizeof__()) print('b=',b.__sizeof__())
Výstup:
a = 104 b = 120
Ve výše uvedeném kódu máme n-tici a seznam b se stejnými položkami, ale velikost n-tice je menší než seznam.
Různé případy použití
Na první pohled by se mohlo zdát, že seznamy mohou vždy nahradit n-tice. Ale n-tice jsou nesmírně užitečné datové struktury
- Použití n-tice místo seznamu může dát programátorovi a tlumočníkovi náznak, že data by se neměla měnit.
- Tice se běžně používají jako ekvivalent slovníku bez klíčů k ukládání dat. Například,
(('Mečoun', 'Dominic Sena', 2001), ('Snowden', 'Oliver Stone', 2016), ('Taxikář', 'Martin Scorsese', 1976))
Výše uvedený příklad obsahuje n-tice uvnitř seznamu, který obsahuje seznam filmů. - Čtení dat je jednodušší, když jsou n-tice uloženy uvnitř seznamu. Například,
((2,4), (5,7), (3,8), (5,9))
je čitelnější než((2,4), (5,7), (3,8), (5,9))
Tuple lze také použít jako klíč ve slovníku kvůli jeho hashovatelné a neměnné povaze, zatímco Seznamy se nepoužívají jako klíč ve slovníku, protože seznam nedokáže zpracovat __hash__()
a má proměnlivou povahu.
key_val= (('alpha','bravo'):123) #Valid key_val = (('alpha','bravo'):123) #Invalid
Klíčové body k zapamatování:
- Doslovná syntaxe n-tic je uvedena v závorkách,
()
zatímco doslovná syntaxe seznamů je uvedena v hranatých závorkách()
. - Seznamy mají proměnnou délku, n-tice má pevnou délku.
- Seznam má proměnlivou povahu, n-tice má neměnnou povahu.
- Seznam má více funkcí než n-tice.