(Python)-初學 Class-5 — 串列的基本用法
(Python)-初學 Class-5 — 串列的基本用法 list 像櫃子般整齊收納我們的資料
在前面我們學了 條件判斷 以及 迴圈 等,可以使程式因應各種不同狀況來做出不同的動作。我們也學過了 變數 跟 基本資料型態 的用法,這 一篇要來介紹的是較為複雜的資料型態 — 串列 list 。
如果曾經有學過 C 語言或是 C++等其他程式語言的話,不同語言通常都可以使用序列來記錄連續性的資料,例如 C 和 C++中常使用的就是陣列 ( Array )。 而在 Python 當中,則使用 list 或tuple 來儲存連續性的資料。
5-1 串列 list
首先要來介紹的資料型態就是 list 。 list 可以用來儲存一連串有順序性的元素。例如我們想要產生一個名叫 thriller 的 list :
thriller = [‘Thriller’, ‘Billie Jean’, ‘Beat It’]
我們會把想要儲存的元素放在 [] 兩個括號中,不同元素之間使用逗號來隔開。上面這行 code 代表我們創建了一個名叫 thriller 的 list,
而在這個 list裏面包含了’Thriller’ 、 ‘Billie Jean’ 、 ‘Beat it’ 這幾個字串。
如果想要將這個 list 印出,結果如下,會印出 thriller 裡面所包含的字串。
如果想要知道這個 list 裡面有幾個元素,可以使用 len() 這個函式。
Learn 1 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller)
print(len(thriller))
[‘Thriller’, ‘Billie Jean’, ‘Beat It’] 3
5-2 取得 list 的元素
想要取得元素的話,可以在 listlist 的名稱後面使用方括號 [] 加上想取得元素的位置 ( index ),就可以取得想要的元素。
my_list[index]
值得一提的是,程式語言中的 index 是從 0 開始的。所以如果想要取得第一個位置的元素,要輸入的位置值會是 0 ,想取得第二個元素則得,輸入 1 ,以此類推。
例如,今天我們想要取得 ‘Billie Jean’ 這個元素。
‘Billie Jean’ 是 thriller 當中的第二個元素,要輸入的 index 是 1。
當輸入print(thriller[1]) 這行指令,就會印出 ‘Billie Jean’ 了 !
Learn 2 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[1])
Billie Jean
上面是印出 list 不同位置的結果。
Learn 3 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[0])
print(thriller[1])
print(thriller[2])
Thriller Billie Jean Beat It
可以看到 :
thriller[0] 代表的是第一個字串 “Thriller” 、 thriller[1] 代表的是第二個字串 “Billie Jean” , thriller[2] 所代表的則是最後一個字串 “beat it” 。
取得 list 裡面的最後一個元素
如果想要取得 list 中的最後一個元素,除了前面輸入字串的 index 以外,也可以輸入 -1 。list[-1] 和 list[len(list)-1] 所代表的值是 相同的。
Learn 4 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[-1])
Beat It
由述可以看到, 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,這就代表我們不小心取到不存在的元素了。
Learn 5 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
print(thriller[3])
IndexError: list index out of range
以範圍取值想要取得一連串範圍的值,使用的方式如下:
my_list[start(開始的index):end(結束的index):sep(間隔)]
值得注意的是,取出來的值只會包含開頭,不會包含結束的 index。後面的間隔如果沒有特別輸入的話,初始值為 1。
以 thriller 這個例子來說,如果想要取得 index 為 0, 1, 2 的值,程式碼如下:
Learn 6 :
thriller = ['Thriller', 'Billie Jean', 'Beat It','Human Nature','PYT']
print(thriller[0:3])
print(thriller[3])
[‘Thriller’, ‘Billie Jean’, ‘Beat It’] Human Nature
輸入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:] 的結果是一樣的。
Learn 7 :
thriller = ['Thriller', 'Billie Jean', 'Beat It','Human Nature','PYT']
print(thriller[:3])
print(thriller[2:])
[‘Thriller’, ‘Billie Jean’, ‘Beat It’] [‘Beat It’, ‘Human Nature’, ‘PYT’]
如上面的例子所示, print(thriller[:3]) ,會印出 index 從 0 開始、到 3 結束(不包含 3 )的元素。
print(thriller[2:]) 則得到 index 從 2 開始,一直到結束的元素。
5-3 增加 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 的最後加入這首歌了。
Learn 8 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
thriller.append('That Girl is Mine')
print(thriller)
[‘Thriller’, ‘Billie Jean’, ‘Beat It’, ‘That Girl is Mine’]
可以看到,thriller 的最後面被加上了 “That Girl is Mine”。
2. insert method
如果想要指定所增加物件的位置呢 ? 可以使用 list 的另一個方法 (method) insert 來指定位置。
my_list.insert(position, object)
用法是my_list.insert(位置, 物件) ,在括號後面第一個值代表的是想要插入的位置,後面則是想要加入的東西本身。
拿上面 append 曾使用過的 thriller 例子來說,把 append 換成 insert,並且指定插入的索引值是 1。程式碼如下 :
Learn 9 :
thriller = ['Thriller', 'Billie Jean', 'Beat It']
thriller.insert(1, 'That Girl is Mine')
print(thriller)
[‘Thriller’, ‘Billie Jean’, ‘That Girl is Mine’, ‘Beat It’]
可以看到新加入的 ‘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)
NameError: name ‘object1’ is not defined
不能使用 insert 或append 嗎?看看下面這個例子:
Learn 10 :
bad_1 = ['Bad', 'Smooth Criminal','Speed Demon']
bad_2 = ['Man in the Mirror', 'Dirty Diana']
bad_1.insert(1, bad_2)
print(bad_1)
[‘Bad’, [‘Man in the Mirror’, ‘Dirty Diana’], ‘Smooth Criminal’, ‘Speed Demon’]
結果所示,如果想用 insert 把 bad_2 這個 list 加到 bad_1 中整合,可以看到 bad_2 的確是被加進 bad_1 中了沒錯,不過是以整個 list (the list itself)的資料型態被塞入的,而不是以元素的形式被加入。
可以看到 “Man in the Mirror”及”Dirty Diana” 兩個元素又被一個中括號所框住,代表的是一個物件
要把第二個 list 中的元素 (而不是整個 list) 加到第一個 list 中的做法,就是改成使用 extend。
Learn 11 :
bad_1 = ['Bad', 'Smooth Criminal','Speed Demon']
bad_2 = ['Man in the Mirror', 'Dirty Diana']
bad_1.extend(bad_2)
[‘Bad’, ‘Smooth Criminal’, ‘Speed Demon’, ‘Man in the Mirror’, ‘Dirty Diana’]
結果,可以看到透過用 extend ,成功將 bad_2 中的歌曲以元素的形式整合到 bad_1 中。
5-4 移除 list 中的元素
1. remove method
想要移除一個 list 中的元素,可以使用 remove method。
my_list.remove(object)
在 remove 後面的括號中輸入想要移除的元素,即可移除。
下面的例子,我們想要將 “Smooth Criminal” 這首歌從 bad 清單中刪去。
Learn 12 :
bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana']
bad.remove('Smooth Criminal')
print(bad)
[‘Bad’, ‘Speed Demon’, ‘Man in the Mirror’, ‘Dirty Diana’]
結果 ,可以看到 “Smooth Criminal” 被刪了。 (QQ)
如果只是想要移除這個 list 的最後一個元素的話,可以用 pop method。
list.pop()
在括號後面不放任何東西的話, 預設 list 中的最後一個 element 會被移除,且會回傳所移除的那個值。
Learn 13 :
bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana']
popped = bad.pop()
print(bad)
print(popped)
[‘Bad’, ‘Smooth Criminal’, ‘Speed Demon’, ‘Man in the Mirror’] Dirty Diana
如程式碼所示,我們在使用 pop method 的時候,產生一個變數 popped,讓這個變數等於 bad.pop() 所回傳的值。
印出 bad 時可以看見, bad 的最後一個元素 “Dirty Diana”已經被移除了;而印出 popped 變數可以看到那正是前面被移除的 “Dirty Diana”。
pop method 對於想要把 list 當作特定資料結構使用來說非常方便 (例如 stack 跟 queue)。
現在我們學到了 list 基本的使用方法,可以處理一連串的資料了~
接下來會介紹如何整理、排序 list,讓資料在處理的時候更加方便有效率 !
免責聲明:
1.本影像檔案皆從網上搜集轉載,不承擔任何技術及版權問題
2.如有下載連結僅供寬頻測試研究用途,請下載後在24小時內刪除,請勿用於商業
3.若侵犯了您的合法權益,請來信通知我們,我們會及時刪除,給您帶來的不便,深表歉意。