從零開始學Python-Day9-集合list和元組tuple

list

list是有序的集合,可隨時添加刪除元素。用中括號[]圈起來,例如

<code>>>> 花名冊 = ['張三','李四','王五','趙六']
>>> 花名冊
['張三', '李四', '王五', '趙六']/<code>

在這裡,花名冊是一個變量,就是一個有序的list,索引排序的位置是從[0]開始,依次往後,len()函數可以統計list中元素個數:

<code>>>> len(花名冊)
4
>>> 花名冊[0]
'張三'
>>> 花名冊[1]
'李四'
>>> 花名冊[2]
'王五'
>>> 花名冊[3]
'趙六'
>>> 花名冊[4]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range/<code>

索引的位置超出了列表的元素總數的話就會報錯indexerror,最後一個元素的索引位置可以記為len(花名冊)-1索引序列還可以倒序排列,最後一個元素的位置是-1,依次往前數就是-2、-3、-4

<code>>>> 花名冊[-1]
'趙六'
>>> 花名冊[-2]
'王五'
>>> 花名冊[-3]
'李四'
>>> 花名冊[-4]
'張三'

>>> 花名冊[-5]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range/<code>

同樣,超出索引範圍報錯indexerror,倒序從後往前數,有幾個元素就有負幾對應的位置。

追加與刪除

前面說了,list是個隨時可以添加刪除元素的有序序列

<code>追加到末尾           append
追加到指定位置 insert
刪除末尾元素 pop
刪除指定位置元素 pop
替換指定位置元素 直接向指定索引位置賦值/<code>

效果如下:

<code>>>> 花名冊.append('孫七')
>>> 花名冊
['張三', '李四', '王五', '趙六', '孫七']
>>> 花名冊.insert(0,'木人張')
>>> 花名冊
['木人張', '張三', '李四', '王五', '趙六', '孫七']
>>> 花名冊.pop()
'孫七'
>>> 花名冊
['木人張', '張三', '李四', '王五', '趙六']
>>> 花名冊.pop(0)
'木人張'
>>> 花名冊

['張三', '李四', '王五', '趙六']
>>> 花名冊[0]='木人張'
>>> 花名冊
['木人張', '李四', '王五', '趙六']/<code>

list內部的元素可以是不同數據類型,一個list也可以作為另一個list的元素,如下,Q這個list裡既有字符串,又有數值,又有布爾值;我們把之前的花名冊這個序列添加到Q的末尾,最終的Q序列裡面就有了四個元素,最後一個元素是另一個list序列花名冊,話有點繞,但還算好理解:

<code>>>> Q = ['Python',2020,True]
>>> Q.append(花名冊)
>>> Q
['Python', 2020, True, ['木人張', '李四', '王五', '趙六']]
>>> len(Q)
4/<code>

如果在Q中要取到木人張該如何操作?可以用Q[-1][0]表示,所以Q其實就是一個二維數組。如果一個list為空,即裡面沒有元素,那麼他的長度也就len應該等於0

<code>>>> L = []
>>> len(L)
0/<code>

tuple

tuple叫做元組,它跟list最大的區別就是一旦初始化就不允許再變化,所謂初始化就是給它賦值。注意這裡跟list的區別,元組tuple的內容是以()括起來的,list是用[]

<code>>>> 花名冊 = ('張三','李四','王五','趙六')
>>> 花名冊
('張三', '李四', '王五', '趙六')/<code>

因為是不可變化的,自然就沒有辦法增加、刪除、替換元素了。元組內元素的定位跟list一樣,用[]擴住的序號表示,從第一位開始0,1,2….

<code>>>> 花名冊 = ('張三','李四','王五','趙六')
>>> 花名冊[0]
'張三'/<code>

tuple的不可變性強調了數據的安全性,對於不需要用戶交互變化的量,最好用tuple,能不用list就不用。

空tuple和1個元素的tuple

如果需要定義一個空的tuple,可以寫作()

<code>>>> t = ()
>>> t
()/<code>

如果是定義只有一個元素的的tuple,需要在單獨元素的後面加一個逗號, 否則就變成了給花名冊這個變量單獨賦值,因為這裡()等同於數學裡的小括號,Python規定這種情況下按數學的小括號計算,那麼這裡就變成了賦值的作用。

<code>>>> 花名冊 = ('張三')
>>> 花名冊

'張三'
>>> 花名冊 = ('張三',)
>>> 花名冊
('張三',)/<code>

換成數字更容易理解,如下,我們給t這個變量賦值為2020,和我們給t這個元組賦值為只有一個2020數值的序列,如下。可以看到當我們輸出單一一個元素的元組時,Python也給我們在它後面加上了逗號,以避免與數學上的()混淆:

<code>>>> t = (2020)
>>> t
2020
>>> t =(2020,)
>>> t
(2020,)/<code>

“可變的”tuple

<code>>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])/<code>

可以看出,初始化的時候元組t包含了三個元素:a、b和一個list [‘A’, ‘B’]當對t[2][0]和t[2][1]重新賦值後,看似元組t的內容發生了變化,但事實上,作為元組t,它的元素依然是a、b和最初的那個list,只不過list作為一個容器,裡面的內容發生了變化,而元組本身的內容並沒有變化。這可以幫助我們理解什麼是tuple元組的“不變”其實說的是元組內的元素的指向永遠不變,但當一個元素指向的對象是一個list,這個list是可變的。

點擊關注,每天進步一點點,從零開始學Python


分享到:


相關文章: