V tomto článku sa dozvieme kľúčové rozdiely medzi zoznamom a n-ticami a ako tieto dve dátové štruktúry používať.
Zoznamy a n-tice ukladajú jeden alebo viac objektov alebo hodnôt v konkrétnom poradí. Objekty uložené v zozname alebo n-tici môžu byť ľubovoľného typu vrátane typu nič definovaného v kľúčovom slove Žiadne.
Zoznamy a n-tice sú si vo väčšine kontextu podobné, existujú však určité rozdiely, ktoré v tomto článku nájdeme.
Rozdiely v syntaxi
Syntax zoznamu a n-tice sa mierne líši. Zoznamy sú obklopené hranatými zátvorkami ()
a n-tice sú obklopené zátvorkami ()
.
Príklad 1.1: Vytvorenie zoznamu oproti vytvoreniu Tuple
list_num = (1,2,3,4) tup_num = (1,2,3,4) print(list_num) print(tup_num)
Výkon:
(1,2,3,4) (1,2,3,4)
Vyššie sme definovali premennú nazvanú list_num, ktorá obsahuje zoznam čísel od 1
do 4
. Zoznam je obklopený zátvorkami ()
. Definovali sme tiež premennú tup_num; ktorý obsahuje n-ticu čísla od 1
do 4
. N-tica je obklopená zátvorkou ()
.
V pythone máme type()
funkciu, ktorá udáva typ vytvoreného objektu.
Príklad 1.2: Vyhľadajte typ dátovej štruktúry pomocou funkcie type ()
type(list_num) type(tup_num)
Výkon:
zoznamová n-tica
Premenlivý zoznam vs Nezmeniteľné n-tice
Zoznam má premenlivú povahu, tj zoznam je možné po vytvorení meniť alebo upravovať podľa potreby, zatiaľ čo n-tica má nemennú povahu, tj po jej vytvorení nie je možné meniť ani upravovať n-ticu.
Príklad 2.1: Upravte Zoznam položiek vs. Tuple
list_num(2) = 5 print(list_num) tup_num(2) = 5
Výkon:
(1,2,5,4) Traceback (posledný hovor posledný): Súbor "python", riadok 6, v TypeError: objekt 'tuple' nepodporuje priradenie položky
Vo vyššie uvedenom kóde sme priradili 5
list_num pri indexe 2
a našli sme 5
index 2
pri výstupe. Tiež sme priradili 5
tup_num v indexe 2
a dostali sme sa type error
. T-tiku nemôžeme upraviť kvôli jej nemennej povahe.
Poznámka: Pretože je n-tica nemenná, majú pevnú veľkosť a veľkosť zoznamu je premenlivá.
Dostupné operácie
Zoznamy majú zabudovanejšiu funkciu ako n-tica. Môžeme použiť dir((object))
vstavanú funkciu na získanie všetkých súvisiacich funkcií pre zoznam a n-ticu.
Príklad 3.1: Zoznam adresárov
dir(list_num)
Výkon:
('__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit__ __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__', 'app' ',' clear copy ',' count ',' extend ',' index ','vložiť ',' pop ',' odstrániť ',' obrátiť ',' triediť ')
Príklad 3.2: Tuple Directory
dir(tup_num)
Výkon:
('__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')
Jasne vidíme, že so zoznamom cez n-ticu je spojených toľko ďalších funkcií. Môžeme vykonať operáciu vkladania a vyskakovania, odstraňovanie a triedenie prvkov v zozname pomocou vstavaných funkcií, ktoré v Tuple nie sú k dispozícii.
Porovnanie veľkosti
Operácia n-tic má menšiu veľkosť ako operácia zoznamu, čo ju robí o niečo rýchlejšou, ale nie až takou zmienkou, kým nebudete mať obrovské množstvo prvkov.
Príklad 5.1: Vypočítajte veľkosť Zoznamu a 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ýkon:
a = 104 b = 120
Vo vyššie uvedenom kóde máme n-ticu a zoznam b s rovnakými položkami, ale veľkosť n-tice je menšia ako zoznam.
Prípady rôznych použití
Na prvý pohľad by sa mohlo zdať, že zoznamy môžu vždy nahradiť n-tice. Ale n-tice sú mimoriadne užitočné dátové štruktúry
- Použitie n-tice namiesto zoznamu môže programátorovi a tlmočníkovi naznačiť, že údaje by sa nemali meniť.
- N-tice sa bežne používajú ako ekvivalent slovníka bez kľúčov na ukladanie údajov. Napríklad,
((„Mečiar“, „Dominic Sena“, 2001), („Snowden“, „Oliver Stone“, 2016), („Taxikár“, „Martin Scorsese“, 1976))
Vyššie uvedený príklad obsahuje n-tice vo vnútri zoznamu, ktorý obsahuje zoznam filmov. - Čítanie údajov je jednoduchšie, keď sú n-tice uložené v zozname. Napríklad,
((2,4), (5,7), (3,8), (5,9))
je ľahšie čitateľný ako((2,4), (5,7), (3,8), (5,9))
Tuple možno tiež použiť ako kľúč v slovníku kvôli ich hašovateľnej a nemennej povahe, zatiaľ čo Zoznamy sa nepoužívajú ako kľúč v slovníku, pretože zoznam nedokáže spracovať __hash__()
a má premenlivú povahu.
key_val= (('alpha','bravo'):123) #Valid key_val = (('alpha','bravo'):123) #Invalid
Kľúčové body, ktoré treba pamätať:
- Doslovná syntax n-tíc je uvedená v zátvorkách,
()
zatiaľ čo doslovná syntax zoznamov je uvedená v hranatých zátvorkách()
. - Zoznamy majú premenlivú dĺžku, n-tica má pevnú dĺžku.
- Zoznam má premenlivú povahu, n-tica má nemennú povahu.
- Zoznam má viac funkcií ako n-tica.