1樓:宋偉
列表(list)和元組(tuple)是 Python 中兩種重要的資料結構。列表和元組之間有相似的地方也有不同的地方,了解兩者的異同可以更好的使用它們,下面我們便對列表和元組做乙個比較。
列表的建立使用方括號 。
my_list=[
1,2,
3,4,
5,6]
my_list
Out[4]:
[1,2
,3,4
,5,6
]type
(my_list
)Out[5
]:list
元組的建立使用圓括號 ()。
my_tuple=(
1,2,
3,4,
5,6)
my_tuple
Out[5]:
(1,2
,3,4
,5,6
)type
(my_tuple
)Out[6
]:tuple
列表my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]my_list
Out[8]:
[1,2
,3,'Jan'
,'Feb'
,'Mar'
]type
(my_list
)Out[9
]:list
元組my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)my_tuple
Out[
11]:(1
,2,3
,'Jan'
,'Feb'
,'Mar'
)type
(my_tuple
)Out[12
]:tuple
列表my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]my_list[0
]Out[14
]:1元組my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)my_tuple[0
]Out[16
]:1列表my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]my_list[-
1]Out[
18]:
'Mar'
元組my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)my_tuple[-
1]Out[
20]:
'Mar'
列表my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]my_list[1
:3]Out[22
]:[2,
3]元組my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)my_tuple[1
:3]Out[24
]:(2,
3)列表my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]foriin
my_list
:print(i
)123
JanFeb
Mar元組
my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)foriin
my_tuple
:print(i
)123
JanFeb
Mar列表
my_list=[
1,2,
3,"Jan"
,"Feb"
,"Mar"
]my_list[0
]=4my_list
Out[
33]:[4
,2,3
,'Jan'
,'Feb'
,'Mar']元組
my_tuple=(
1,2,
3,"Jan"
,"Feb"
,"Mar"
)my_tuple[0
]=4TypeError
Traceback
(most
recent
call
last
) -input-35 -aa9eb6c6a7e5 >in >()----> 1my_tuple[0 ]=4TypeError :'tuple' object does notsupport item assignment 列表my_list=[ 1,2, 3,4, 5,6] my_list .__sizeof__ ()Out[37 ]:88 元組my_tuple=( 1,2, 3,4, 5,6) my_tuple .__sizeof__ ()Out[39 ]:72 從例子中可以看出,在儲存的元素相同時,列表需要的儲存空間比元組要大,這是因為列表在儲存元素的同時還要儲存指向元素的指標。因此占用的儲存空間要大。 列表和元組在初始化以及訪問的效能是怎樣的呢?我們通過例子來看下。 python-m timeit "x=[1,2,3,4,5,6,7,8]" 5000000 loops ,bestof5 :73nsec perloop python-m timeit "x=(1,2,3,4,5,6,7,8)" 20000000 loops ,bestof5 :16.6 nsec perloop 從初始化的耗時可以看出,列表的初始化速度是元組的 4 倍多。 python-m timeit-s "x=[1,2,3,4,5,6,7,8]" "y=x[3]" 10000000 loops ,bestof5 :35.8 nsec perloop python-m timeit-s "x=(1,2,3,4,5,6,7,8)" "y=x[3]" 10000000 loops ,bestof5 :35.4 nsec perloop 從訪問的耗時可以看出,列表和元組的速度差不多。 由於元組在建立之後不可改變,因此比較適合儲存的資料和數量不變的場景。例如,可以用元組來儲存一年的月份名稱: months_tuple=( "Jan" ,"Feb" ,"Mar" ,"Apr" ,"May" ,"Jun" ,"Jul" ,"Aug" ,"Sep" ,"Oct" ,"Nov" ,"Dec" )由於列表在建立之後允許改變,因此比較適合儲存的資料和數量變化的場景。例如,可以用列表來儲存商品的名稱: product_list=[ ,"pear" ,"banana"]= [1,2 ,3,4 ,5,6 ]my_list.( 7)my_list Out[ 33]:[1 ,2,3 ,4,5 ,6,7 ]my_list .insert(2 ,8)my_list Out[ 35]:[1 ,2,8 ,3,4 ,5,6 ,7]my_list .remove(8 )my_list Out[ 37]:[1 ,2,3 ,4,5 ,6,7 ]my_list .pop ()Out[38 ]:7my_list .pop(3 )Out[39 ]:4my_list Out[ 40]:[1 ,2,3 ,5,6 ]my_list .index(5 )Out[41 ]:3my_list2=[ 1,2, 3]my_list .extend (my_list2 )my_list Out[ 44]:[1 ,2,3 ,5,6 ,1,2 ,3]my_list .count(2 )Out[45 ]:2my_list .count(3 )Out[46 ]:2my_list .sort ()my_list Out[ 48]:[1 ,1,2 ,2,3 ,3,5 ,6]my_list .reverse ()my_list Out[ 50]:[6 ,5,3 ,3,2 ,2,1 ,1]index() - Returns the index of the first matched item count() - Returns the count of the number of items passed as an argument my_tuple=( 1,2, 3,3, 4,5) my_tuple .count(3 )Out[52 ]:2my_tuple .index(5 )Out[53 ]:5本文主要介紹了列表和元組的不同之處,了解了不同之處,使得我們在使用的時候可以選擇最合適的資料結構。 2樓:yang元祐 1.列表 Python 有一些復合資料型別, 用來把其它值分組. 最全能的就是list, 它可以寫為在方括號中的通過逗號分隔的一列值(項). 列表的項並不需要 是同一型別. 1 >>> a = ['spam ', 'eggs', 100 , 1234] 2 >>> a 3 ['spam', 'eggs ', 100 , 1234] 2.元組 Python的元組與列表類似,不同之處在於元組的元素不能修改。 元組一般使用小括號,列表使用方括號。 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。 如下例項: tup1 = ('physics', 'chemistry', 1997, 2000) tup2 = (1, 2, 3, 4, 5 ) tup3 = "a", "b", "c", "d" 顯然,列表的許可權遠大於元組 3樓:城陵 如果沒學過什麼靜態型別語言的話就會有這個疑問,對於Array來說你沒法宣告或者確定某一索引處的型別,但是Tuple可以。所以在靜態型別語言中Tuple還是用得很多的。 所以這個問題的答案是:Tuple比Array更加安全(不僅是型別上的)。 4樓:靈劍 就是因為不能修改才有用啊,因為不能修改,所以可以安全地儲存乙個引用,而不用擔心裡面的內容被其他程式修改了導致邏輯錯誤。 其實與大部分人想象的不同,Python中大部分物件從邏輯上來說都是不可變的,因為預設使用id作為hash值,這表明在物件整個生命週期中hash保持不變,==操作也返回相同的結果,因此哪怕屬性改變了,從Python的角度來看這個物件也是不變的。 對內建物件來說,int、float、str也是這樣的,但與物件有些不同的是,它們的hash值是直接跟值相關的,因此我們會發現1, 1L(Python2.x), 1.0的hash值是一樣的,它們的值也一樣,這樣對於set、dict等操作它們也會被當作是同乙個key;但是它們的id()其實是不一樣的: >>> 1 == 1.0 True >>> hash(1) 1>>> hash(1.0) 1>>> id(1) 42360840L >>> id(1.0) 42421624L >>> hash(1.0 + 1e-10) 1304358912 Python中的物件在做字典的Key的時候,是否相等可以按照真實的值比較,而不是僅僅靠引用比較,這是很有用的特性。那麼有的時候我們有多個key,我們希望按對應位置的值是否一一對應地相等來判斷兩組key是否相等,這時候就需要tuple了,它實際上實現了乙個遞迴進行hash的演算法: >>> (1,'abc') == (1.0,'abc') True >>> hash((1,'abc')) -1981908765 >>> hash((1.0,'abc')) -1981908765 >>> ((1,1.0,1L,(1,),(1.0,1)),1.0) == ((1.0,1,1,(1.0,),(1,1.0)),1) True >>> hash(((1,1.0,1L,(1,),(1.0,1)),1.0)) 530469371 >>> hash(((1.0,1,1,(1.0,),(1,1.0)),1)) 530469371 可以對兩組帶有結構的資料進行比較和hash,這個是非常有用的。我們可以將許多資料結構用tuple來表示,比如說我們可以用tuple來表示一棵完整的二叉樹: AB CD E F ('A',( 'B', ('D' ,(), ()), ('E' ,(),()) ),('C', (),( 'F', (),()))) 黃哥 這個問題這樣去理解 t 繫結的tuple 物件是不可變,但內部的元素可以是可變的資料型別 t 2 是list 所以t 2 是可變資料型別。 t 2233,1,2,3 id t 2771807698688 id t 2 2771807698368 t 2 4 id t 2 27718076983... 黑馬程式設計師教程 用於在列表末尾新增新的元素 copy 用於複製列表 count 用於統計某個元素在列表中出現的次數 extend 用於在列表末尾一次性新增另乙個序列中的所有元素,即使用新列表擴充套件原來的列表 index 用於從列表中找出某個值第乙個匹配項的索引位置insert 用於按照索引將元... 雨滴測試 列表和字典是python內建的兩種非常常見的資料結構,可以將它們理解為乙個資料容器,其主要用途都是用於存放資料,但存放資料的形式是不一樣的。字典中的資料是由鍵值對組成,就好比快遞櫃,在每個櫃上都會有乙個編號,那這個編號就像字典中的鍵,而櫃子內存放的貨物就像字典中的值,獲取物品時需要先知道這...Python的元組巢狀列表,列表方法改變元組內列表,那元組還算不可變麼?
Python中列表的方法有什麼?
Python中列表和字典有什麼區別,分別適用於什麼場景?