Python 初學第五講 — 串列的基本用法

list 像櫃子般整齊收納我們的資料

陳子晴
ccClub
Published in
11 min readNov 30, 2018

--

在前面我們學了 條件判斷 以及 迴圈 等,可以使程式因應各種不同狀況來做出不同的動作。我們也學過了 變數基本資料型態 的用法,這一篇要來介紹的是較為複雜的資料型態 — 串列 list

如果曾經有學過 C 語言或是 C++等其他程式語言的話,不同語言通常都可以使用序列來記錄連續性的資料,例如 C 和 C++中常使用的就是陣列 ( Array )。 而在 Python 當中,則使用 listtuple 來儲存連續性的資料。

串列 list

首先要來介紹的資料型態就是 listlist 可以用來儲存一連串有順序性的元素。例如我們想要產生一個名叫 thrillerlist :

thriller = ['Thriller', 'Billie Jean', 'Beat It']

我們會把想要儲存的元素放在 [] 兩個括號中,不同元素之間使用逗號來隔開。上面這行 code 代表我們創建了一個名叫 thriller 的 list,而在這個 list裏面包含了'Thriller’'Billie Jean''Beat it' 這幾個字串。

如果想要將這個 list 印出,結果如下,會印出 thriller 裡面所包含的字串。

如果想要知道這個 list 裡面有幾個元素,可以使用 len() 這個函式。

取得 list 的元素

想要取得元素的話,可以在 listlist 的名稱後面使用方括號 [] 加上想取得元素的位置 ( index ),就可以取得想要的元素。

my_list[index]

值得一提的是,程式語言中的 index 是從 0 開始的。所以如果想要取得第一個位置的元素,要輸入的位置值會是 0 ,想取得第二個元素則得輸入 1 ,以此類推。

例如,今天我們想要取得 'Billie Jean' 這個元素。
'Billie Jean' 是 thriller 當中的第二個元素,要輸入的 index 是 1。
當輸入print(thriller[1]) 這行指令,就會印出 'Billie Jean' 了 !

thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[1])

下面是印出 list 不同位置的結果。
可以看到 :
thriller[0] 代表的是第一個字串 "Thriller"
thriller[1] 代表的是第二個字串 "Billie Jean"
thriller[2] 所代表的則是最後一個字串 "beat it"

取得 list 裡面的最後一個元素

如果想要取得 list 中的最後一個元素,除了前面輸入字串的 index 以外,也可以輸入 -1list[-1]list[len(list)-1] 所代表的值是相同的。

thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[-1])

由上圖可以看到, print(thriller[-1]) 的結果會是 "Beat It"
使用 -1 ,就可以不必知道整個 list 的長度,也能夠取得最後一個元素。

由於我們常常會更動 list 的內容及長度,以-1 來表示最後一個元素的話,就不必一直更改 index ,可以增加程式的一致性 (consistency) ,日後更改或是維護的時候會更方便。

取到 list 裡面所沒有的元素 : list index out of range

在 thriller 這個 list 當中只有三個元素,代表可以取得的 index 只有 0 、1、2。如果試著取 index 為 3 的值會發生什麼事呢?

由下圖可以看到 ,如果輸入 print(thriller[3]) 的話,會出現錯誤 IndexError,這就代表我們不小心取到不存在的元素了。

以範圍取值

想要取得一連串範圍的值,使用的方式如下:

my_list[start(開始的index):end(結束的index):sep(間隔)]

值得注意的是,取出來的值只會包含開頭,不會包含結束的 index。後面的間隔如果沒有特別輸入的話,初始值為 1。

以 thriller 這個例子來說,如果想要取得 index 為 0, 1, 2 的值,程式碼如下:

thriller = ['Thriller', 'Billie Jean', 'Beat It','Human Nature','PYT']
print(thriller[0:3])
print(thriller[3]

輸入print(thriller[0:3]) 所得到的結果,會是 "Thriller""Billie Jean""Beat It" ,也就是 index 為 0、 1、 2 的元素。
並不會包含索引值是 3 的值。

以範圍取值的更多表示方法

如果輸入 my_list[:end] 、也就是省略輸入索引值起點,初始會從 0 開始。
所以輸入 my_ist[:2]my_ist[0:2] 的結果會是一樣的。

至於 my_list[start:] 省略終點的話,Python 會假設你想要取到最後一個值,所以輸入 my_list[2:len(my_list)]my_list[2:] 的結果是一樣的。

thriller = ['Thriller', 'Billie Jean', 'Beat It','Human Nature','PYT']
print(thriller[:3])
print(thriller[2:])

如上面的例子所示, print(thriller[:3]) ,會印出 index 從 0 開始、到 3 結束(不包含 3 )的元素。

print(thriller[2:]) 則得到 index 從 2 開始,一直到結束的元素。

增加 list 裡面的元素

1. append method

想要增加 list 裡面的元素,可以使用 append 這個方法( method )來將新的元素增加到 list 的最後。

my_list.append(object)

以 thriller 的例子來說,若想要在這個代表著專輯的 list 當中加入
"That Girl is Mine” 這首歌的話,就可以使用 list 的 append method。
輸入thriller.append('That Girl is Mine') ,就會在這個 list 的最後加入這首歌了。

thriller = ['Thriller', 'Billie Jean', 'Beat It']
thriller.append('That Girl is Mine')
print(thriller)

下圖可以看到,thriller 的最後面被加上了 "That Girl is Mine"。

2. insert method

如果想要指定所增加物件的位置呢 ? 可以使用 list 的另一個方法 (method) insert 來指定位置。

my_list.insert(position, object)

用法是my_list.insert(位置, 物件) ,在括號後面第一個值代表的是想要插入的位置,後面則是想要加入的東西本身。

拿上面 append 曾使用過的 thriller 例子來說,把 append 換成 insert,並且指定插入的索引值是 1。程式碼如下 :

thriller = ['Thriller', 'Billie Jean', 'Beat It']
thriller.insert(1, 'That Girl is Mine')
print(thriller)

可以看到新加入的 'That Girl is Mine' 被排在 list 中的第二個,也就是索引值 index 為 1 的位置。

3. extend method

如果一次想加入很多個值、或是想將某個 list 中的元素加到另一個 list 的時候,可以用 extend 這個方法。

list_1 = [object1, object2, object3]
list_2 = [object4, object5]
list_1.extend(list_2)

不能使用 insertappend 嗎?看看下面這個例子:

bad_1 = ['Bad', 'Smooth Criminal','Speed Demon']
bad_2 = ['Man in the Mirror', 'Dirty Diana']
bad_1.insert(1, bad_2)
print(bad_1)

如下圖結果所示,如果想用 insert 把 bad_2 這個 list 加到 bad_1 中整合,可以看到 bad_2 的確是被加進 bad_1 中了沒錯,不過是以整個 list (the list itself)的資料型態被塞入的,而不是以元素的形式被加入。

可以看到 "Man in the Mirror"及"Dirty Diana" 兩個元素又被一個中括號所框住,代表的是一個物件

要把第二個 list 中的元素 (而不是整個 list) 加到第一個 list 中的做法,就是改成使用 extend

bad_1 = ['Bad', 'Smooth Criminal','Speed Demon']
bad_2 = ['Man in the Mirror', 'Dirty Diana']
bad_1.extend(bad_2)
print(bad_1)

結果如下圖,可以看到透過用 extend ,成功將 bad_2 中的歌曲以元素的形式整合到 bad_1 中。

使用extend method之後,第二個 list 的元素被加入第一個 list中

移除 list 中的元素

1. remove method

想要移除一個 list 中的元素,可以使用 remove method。

my_list.remove(object)

remove 後面的括號中輸入想要移除的元素,即可移除。
下面的例子,我們想要將 "Smooth Criminal" 這首歌從 bad 清單中刪去。

bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana']
bad.remove('Smooth Criminal')
print(bad)

結果如下 ,可以看到 "Smooth Criminal" 被刪了。 (QQ)

2. pop method

如果只是想要移除這個 list 的最後一個元素的話,可以用 pop method。

list.pop()

在括號後面不放任何東西的話, 預設 list 中的最後一個 element 會被移除,且會回傳所移除的那個值。

bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana']
popped = bad.pop()
print(bad)
print(popped)

如程式碼所示,我們在使用 pop method 的時候,產生一個變數 popped,讓這個變數等於 bad.pop() 所回傳的值。

印出 bad 時可以看見, bad 的最後一個元素 "Dirty Diana"已經被移除了;而印出 popped 變數可以看到那正是前面被移除的 "Dirty Diana"。

pop method 對於想要把 list 當作特定資料結構使用來說非常方便 (例如 stack 跟 queue)。

現在我們學到了 list 基本的使用方法,可以處理一連串的資料了~
接下來會介紹如何整理、排序 list,讓資料在處理的時候更加方便有效率 !

我們是 ccClub 團隊,致力於讓 Python 成為大家的第二外語,希望能用淺顯易懂、循序漸進的方式,帶領新手一步步跨入程式設計的世界。如果你喜歡這篇文章,請給我們 1~10 個掌聲。
如果你喜歡「Python初學」的教學系列文,請給我們 11 個以上的掌聲。


Facebook: ccClub Python讀書會

--

--

ccClub
ccClub

Published in ccClub

自 2016 開始舉辦 Python 讀書會的我們,是致力於將程式語言變成大家的第二外語的團隊。

陳子晴
陳子晴

Responses (2)