列表與元組的區別

2022-01-30 16:01:24 字數 1827 閱讀 1610

回答它們的區別之前,先來說說兩者有什麼相同之處。list 與 tuple 都是序列型別的容器物件,可以存放任何型別的資料、支援切片、迭代等操作

>>> foos = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> foos[0:10:2]

[0, 2, 4, 6, 8]

>>> bars = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

>>> bars[1:10:2]

(1, 3, 5, 7, 9)

兩者的操作如此相似,python 為什麼還要設計一種叫 tuple 的型別出來呢?這就要從它們的不同之處來尋找答案。

兩種型別除了字面上的區別(括號與方括號)之外,最重要的一點是tuple是不可變型別,大小固定,而 list 是可變型別、資料可以動態變化,這種差異使得兩者提供的方法、應用場景、效能上都有很大的區別。

列表特有方法:

所有的操作都基於原來列表進行更新,而 tuple 作為一種不可變的資料型別,同樣大小的資料,初始化和迭代 tuple 都要快於 list

>python -m timeit "[1,2,3,4,5]"

10000000 loops, best of 3: 0.123 usec per loop

>python -m timeit "(1,2,3,4,5)"

100000000 loops, best of 3: 0.0166 usec per loop

同樣大小的資料,tuple 占用的記憶體空間更少

>>> foo = tuple(range(1000))

>>> bar = list(range(1000))

>>> foo.__sizeof__()

8024

>>> bar.__sizeof__()

9088

原子性的 tuple 物件還可作為字典的鍵

>>> foo = (1,(2,3))

>>> d =

>>> bar = (1, [2,3]) # 非原子性tuple,因為元組中包含有不可雜湊的list

>>> d =

traceback (most recent call last):

file "", line 1, in

typeerror: unhashable type: 'list'

tuple 用於儲存異構(heterogeneous)資料,當做沒有欄位名的記錄來用,比如用 tuple 來記錄乙個人的身高、體重、年齡。

person = ("zhangsan", 20, 180, 80)

比如記錄座標上的某個點

point = (x, y)
而列表一般用於儲存同構資料(homogenous),同構資料就是具有相同意義的資料,比如下面的都是字串型別

["zhangsan", "lisi", "wangwu"]

再比如 list 存放的多條使用者記錄

[("zhangsan", 20, 180, 80), ("wangwu", 20, 180, 80)]

資料庫操作中查詢出來的記錄就是由元組構成的列表結構。

因為 tuple 作為沒有名字的記錄來使用在某些場景有一定的侷限性,所以又有了乙個 namedtuple 型別的存在,namedtuple 可以指定欄位名,用來當做一種輕量級的類來使用。

元組與列表的區別

列表定義方式 ulist ulist abc ulist 1,abc 4.5 列表的操作 ulist 1,abc 4.5 ulist.extend 123 789 結果 1,abc 4.5,123 123 789 ulist.insert 2,efg 結果 1,abc efg 4.5,123 123...

元組與列表的區別

元組與列表的區別,元組它的關鍵是不可變性。如果在程式中以列表的形式傳遞乙個物件的集合,它可能在任何地方改變 如果使用元組的話,則不能。元組提供了一種完整的約束。高階,可以用切片的方式更新元組 temp 1,2,4,5 temp temp 2 3,temp 2 temp 1,2,3,4,5 切片雖然可...

tuple list 元組與列表區別

pyhon中tuple表示元組,list表示列表。這兩種都是很重要的資料結構。它們的區別是list的長度是可變的,而元組的長度是不可變的。關於可變,需要通過例項來說明。下面幾個變數都是屬於列表,可以看出都是列表元素需要填入 這點需要注意,元素可以使數字,字串,也可以是列表。如list 2列表中還包括...