Seznamy a ntice v Pythonu jsou dvě třídy datových struktur Pythonu. Struktura seznamu je dynamická a snadno se mění, zatímco struktura n-tice je statická a nelze ji změnit. To znamená, že n-tice je obecně rychlejší než seznam. Seznamy jsou označeny hranatými závorkami a n-tice jsou označeny závorkami.
Rozdíly mezi List a Tuple v Pythonu
Sno | SEZNAM | TUPLE |
|---|---|---|
| 1 | Seznamy jsou proměnlivý | N-tice jsou neměnné |
| 2 | Implikace iterací je časově náročná | Implikace iterací je poměrně rychlejší |
| 3 | Seznam je lepší pro provádění operací, jako je vkládání a mazání. | Datový typ Tuple je vhodný pro přístup k prvkům |
| 4 | Seznamy zabírají více paměti | Tuple spotřebovává méně paměti ve srovnání se seznamem |
| 5 | Seznamy mají několik vestavěných metod | Tuple nemá mnoho vestavěných metod. |
| 6 | S větší pravděpodobností dojde k neočekávaným změnám a chybám | Protože se n-tice nemění, jsou mnohem méně náchylné k chybám. |
Seznam Python vs Python Tuple
Otestujte, zda jsou n-tice neměnné a seznamy jsou proměnlivé
Zde porovnáme seznam a testy mutability n-tice.
Python3 # Creating a List with # the use of Numbers # code to test that tuples are mutable List = [1, 2, 4, 4, 3, 3, 3, 6, 5] print('Original list ', List) List[3] = 77 print('Example to show mutability ', List)> Výstup
Original list [1, 2, 4, 4, 3, 3, 3, 6, 5] Example to show mutability [1, 2, 4, 77, 3, 3, 3, 6, 5]>
Můžeme vidět tady tuple nelze upravit.
Python3 # code to test that tuples are immutable tuple1 = (0, 1, 2, 3) tuple1[0] = 4 print(tuple1)>
Výstup:
porovnání řetězců v Javě
Traceback (most recent call last): File 'e0eaddff843a8695575daec34506f126.py', line 3, in tuple1[0]=4 TypeError: 'tuple' object does not support item assignment>
Který seznam nebo n-tice je lepší v Pythonu?
Abychom tuto odpověď otestovali, spusťte některé operace na Python Tuple a Python List. To nám dá lepší představu o tom, který seznam nebo n-tice je v Pythonu lepší.
Otestujte, zda jsou ntice paměťově efektivní
Protože n-tice jsou uloženy v jediném paměťovém bloku, nevyžadují další prostor pro nové objekty, zatímco seznamy jsou alokovány do dvou bloků, nejprve do pevného se všemi Krajta informace o objektu a za druhé blok proměnné velikosti pro data.
Python3 import sys a_list = [] a_tuple = () a_list = ['Geeks', 'For', 'Geeks'] a_tuple = ('Geeks', 'For', 'Geeks') print(sys.getsizeof(a_list)) print(sys.getsizeof(a_tuple))> Výstup
96 80>
Otestujte, zda je implikace iterací srovnatelně rychlejší v Tuples
Protože n-tice jsou uloženy v jediném paměťovém bloku, nevyžadují další prostor pro nové objekty, protože jsou neměnné, zatímco seznamy jsou alokovány do dvou bloků, nejprve do pevného se všemi Krajta informace o objektu a za druhé blok proměnné velikosti pro data, díky kterému jsou ještě rychlejší.
Python3 # code import sys, platform import time l=list(range(100000001)) t=tuple(range(100000001)) start = time.time_ns() for i in range(len(t)): a = t[i] end = time.time_ns() print('Total lookup time for Tuple: ', end - start) start = time.time_ns() for i in range(len(l)): a = l[i] end = time.time_ns() print('Total lookup time for LIST: ', end - start)> Výstup
Total lookup time for Tuple: 7038208700 Total lookup time for LIST: 19646516700>
Proměnlivý seznam vs. Neměnné n-tice
v Krajta , podporují seznamy i n-tice řadu operací, včetně indexování, dělení, zřetězení a dalších. Mezi operacemi, které jsou k dispozici pro seznamy a n-tice, však existují určité rozdíly kvůli jejich mutovatelnosti a neměnnosti.
Indexování Pythonu
Seznamy i n-tice umožňují přístup k jednotlivým prvkům pomocí jejich indexu, počínaje 0.
Python3 my_list = [1, 2, 3] my_tuple = (4, 5, 6) print(my_list[0]) # Output: 1 print(my_tuple[1]) # Output: 5>
Výstup
1 5>
Python Slicing
Seznamy i n-tice umožňují extrahovat podmnožinu prvků pomocí dělení.
0,04 jako zlomekPython3
my_list = [1, 2, 3, 4, 5] my_tuple = (6, 7, 8, 9, 10) print(my_list[1:3]) # Output: [2, 3] print(my_tuple[:3]) # Output: (6, 7, 8)>
Výstup
[2, 3] (6, 7, 8)>
Zřetězení Pythonu
Seznamy i n-tice lze zřetězit pomocí operátoru +.
Python3 list1 = [1, 2, 3] list2 = [4, 5, 6] tuple1 = (7, 8, 9) tuple2 = (10, 11, 12) print(list1 + list2) # Output: [1, 2, 3, 4, 5, 6] print(tuple1 + tuple2) # Output: (7, 8, 9, 10, 11, 12)>
Výstup
[1, 2, 3, 4, 5, 6] (7, 8, 9, 10, 11, 12)>
Poznámka - Existují však některé operace, které jsou dostupné pouze pro seznamy kvůli jejich proměnlivosti.
Python Append
K seznamům lze přidávat nové prvky pomocí metody append().
Python3 my_list = [1, 2, 3] my_list.append(4) print(my_list) # Output: [1, 2, 3, 4]>
Výstup
[1, 2, 3, 4]>
Python Extend
Seznamy lze také rozšířit o další seznam pomocí metody extend().
co dělá ravel v pythonuPython3
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # Output: [1, 2, 3, 4, 5, 6]>
Výstup
[1, 2, 3, 4, 5, 6]>
Odebrat Python
Seznamy můžete nechat prvky odstranit pomocí metody remove().
Python3 my_list = [1, 2, 3, 4] my_list.remove(2) print(my_list) # Output: [1, 3, 4]>
Výstup
[1, 3, 4]>
Kdy použít n-tice nad seznamy?
v Krajta , n-tice a seznamy se používají k ukládání kolekcí dat, ale mají některé důležité rozdíly. Zde je několik situací, kdy možná budete chtít použít n-tice místo seznamů –
Neměnná data – N-tice jsou neměnné, takže jakmile jsou vygenerovány, jejich obsah nelze změnit. Díky tomu jsou n-tice vhodnou volbou pro ukládání informací, které by se neměly měnit, jako jsou nastavení nastavení, konstantní hodnoty nebo jiné informace, které by měly zůstat stejné, když je váš program spuštěn.
Výkon – N-tice jsou lehčí než seznamy a jejich generování, přístup a opakování mohou být rychlejší, protože jsou neměnné. Použití n-tice může být efektivnější než použití a seznam pokud máte obrovskou sbírku dat, která potřebujete pravidelně ukládat, načítat a používat a tato data není třeba měnit.
Integrita dat - Zajištěním toho, že struktura a obsah dat zůstane konzistentní, lze k zajištění integrity dat využít n-tice. Aby se ujistil, že volající ví, kolik dat může očekávat, například v případě funkce se vrací nastavené množství hodnot, možná je budete chtít vrátit jako n-tici, nikoli jako seznam.