Python 中列表和元組有哪些區別?

時間 2021-05-31 11:33:38

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',

(),())))

Python的元組巢狀列表,列表方法改變元組內列表,那元組還算不可變麼?

黃哥 這個問題這樣去理解 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...

Python中列表的方法有什麼?

黑馬程式設計師教程 用於在列表末尾新增新的元素 copy 用於複製列表 count 用於統計某個元素在列表中出現的次數 extend 用於在列表末尾一次性新增另乙個序列中的所有元素,即使用新列表擴充套件原來的列表 index 用於從列表中找出某個值第乙個匹配項的索引位置insert 用於按照索引將元...

Python中列表和字典有什麼區別,分別適用於什麼場景?

雨滴測試 列表和字典是python內建的兩種非常常見的資料結構,可以將它們理解為乙個資料容器,其主要用途都是用於存放資料,但存放資料的形式是不一樣的。字典中的資料是由鍵值對組成,就好比快遞櫃,在每個櫃上都會有乙個編號,那這個編號就像字典中的鍵,而櫃子內存放的貨物就像字典中的值,獲取物品時需要先知道這...