python列表和元組的區(qū)別如下
相同點:都是序列類型
回答它們的區(qū)別之前,先來說說兩者有什么相同之處。list與tuple都是序列類型的容器對象,可以存放任何類型的數(shù)據(jù)、支持切片、迭代等操作
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的類型出來呢?這就要從它們的不同之處來尋找答案。
不同點一:不可變VS可變
兩種類型除了字面上的區(qū)別(括號與方括號)之外,最重要的一點是tuple是不可變類型,大小固定,而list是可變類型、數(shù)據(jù)可以動態(tài)變化,這種差異使得兩者提供的方法、應用場景、性能上都有很大的區(qū)別。
列表特有方法:
foo=[2,3,1,9,4]
foo.sort()#排序
foo.insert(5,10)#插入
foo.reverse()#反轉
foo.extend([-1,-2])#擴展
foo.remove(10)#移除
foo.pop()#彈出最后一個元素
foo.append(5)#追加
所有的操作都基于原來列表進行更新,而tuple作為一種不可變的數(shù)據(jù)類型,同樣大小的數(shù)據(jù),初始化和迭代tuple都要快于list
python-mtimeit“[1,2,3,4,5]”
10000000loops,bestof3:0.123usecperloop
python-mtimeit“(1,2,3,4,5)”
100000000loops,bestof3:0.0166usecperloop
同樣大小的數(shù)據(jù),tuple占用的內存空間更少
foo=tuple(range(1000))
bar=list(range(1000))
foo.sizeof()
8024
bar.sizeof()
9088
原子性的tuple對象還可作為字典的鍵
foo=(1,(2,3))
d={foo:1}
bar=(1,[2,3])#非原子性tuple,因為元組中包含有不可哈希的list
d={bar:1}
Traceback(mostrecentcalllast):
File“”,line1,in
TypeError:unhashabletype:‘list’
不同點二:同構VS異構
tuple用于存儲異構(heterogeneous)數(shù)據(jù),當做沒有字段名的記錄來用,比如用tuple來記錄一個人的身高、體重、年齡。
person=(“zhangsan”,20,180,80)
比如記錄坐標上的某個點
point=(x,y)
而列表一般用于存儲同構數(shù)據(jù)(homogenous),同構數(shù)據(jù)就是具有相同意義的數(shù)據(jù),比如下面的都是字符串類型
[“zhangsan”,“Lisi”,“wangwu”]
再比如list存放的多條用戶記錄
[(“zhangsan”,20,180,80),(“wangwu”,20,180,80)]
數(shù)據(jù)庫操作中查詢出來的記錄就是由元組構成的列表結構。
因為tuple作為沒有名字的記錄來使用在某些場景有一定的局限性,所以又有了一個namedtuple類型的存在,namedtuple可以指定字段名,用來當做一種輕量級的類來使用。
以上內容為大家介紹了python培訓之列表和元祖之間的區(qū)別,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。