前言:
上一筆記講到 string 也可以視作 list,那麼就來看看 list 有什麼神通之處。
在一起筆記 list 之前,如果你有其他語言的基礎,並且知道 array 跟 linked-list ,建議將 list 作為一個獨立的資料型別看待,不要認為 list 屬於他們倆其中之一。
閱讀時間:10 分鐘

list 與 tuple 是什麼?
這邊筆記兩者的用法以及相同點。
list 與 tuple 主要的用法,都是提供一連串的相關資料。
例如:台灣的地名可以這樣建立資料。
list_locat = ["台北", "新北", "基隆", "宜蘭", "桃園", "新竹"...(省略)]
tuple_locat = ("台北", "新北", "基隆", "宜蘭", "桃園", "新竹"...(省略))
建立之後,我們可以透過 index,輕易地取得 list 或 tuple 裡的元素(element,指串列裡的每一筆子資料),用法跟 string 相同。
例如:list_locat[1] 就表示 “新北”,tuple_locat[2] 則表示 “基隆”。
同樣的 list 與 tuple 也有類似 slice 的用法(參照資料型別 – string 的說明),不過它其實是 range。
例如:list_locat[1:3] 會得到 [‘新北’, ‘基隆’] 的結果。
如此一來,是否可以漸漸理解,為什麼說 string 是一種 list 的說法了呢?在 python 的官方文件裡,將 list 與 tuple 稱作 「Sequence Types」,中文譯成序列型別,同樣作為序列型別的還有 range 型別,也就是上述提及的,序列型別擁有以 index 為核心的特性。而 string 建立了類似序列型別的操作,卻不完全使用,因此 string 並不是序列型別,string 的 slice 也採納了 range 的用法,因此在官方文件裡,你也會看到提及 「slice 是個相似 range 」的說明卻不是「與 range 相同」。
list 與 tuple 的不同
接下來就來看看他們有什麼不同。絕對不是只有在程式上,一個使用[ ],另一個使用( ),如此而已。
最直截了當的差異就在「是否能夠編輯」,tuple 裡的元素是無法再進行修改的,也包括無法增加,所以 tuple 提供的只有可讀性(readable),這樣的做法稱為「唯讀(read-only)」。思考一下為什麼要有這樣的使用方式呢?如果有一堆重要的資料,不可以輕易修改,那麼就很適合使用 tuple,因為唯讀的特性,可以保證資料的正確性。
網路上或許你會查到一些偏方來給 tuple 增加元素,確實是可行的,這依賴了 python 的 unpacking 技術,之後會以小知識的方式說明,但非常不建議這樣使用。
list 的操作
操作 list,為它增加元素或是刪除元素,都是透過 list 作為物件裡的方法來實現。
增加元素
增加元素常用的方法有三個:append()、insert()、extend(),這三個方法,對應著三種不同的增加方式。
append() 方法使一個新的元素增加到串列的最後端,並產生新的 index。
insert() 方法使一個新的元素以指定的 index 增加到串列中,原本該 index 的元素則後移,往後的亦然。
extend() 方法使另一串列增加到指定串列的後端。

補充:
insert() 方法的第一個方法要放入兩個參數(關於參數會在函數的部分說明),第一個表示指定的位置,第二個則是要加入的元素。
python 串列裡的元素沒有硬性規定一定是相同的資料型別,因此可以是 a=[1,2,”hello”]。
承上面的例子,我們可以使用 a[1] =1 來改變 index 為 1 的元素,但卻無法使用 a[10] =10 來增加串列的元素。
取出元素(刪除元素)
取出/刪除元素的操作常用的也有三種:pop() 、remove()、clear(),其中 pop() 跟 remove() 有點相似,但使用的情境完全不同。
pop() 方法是取出元素的應用,可以使用某個變數來承接取出的元素,而原本的串列則會刪出該元素,所以是「取出」。
remove() 方法是刪除元素的應用,透過填入元素來刪除元素,與 pop() 不一樣是並不會有取出的效果,所以是「刪除」。
clear() 方法就沒有爭議啦,直接將整個串列的元素清空。

補充:
或許有人會好奇刪除整個串列的資料有什麼好處?不再去使用它就是了,晚一點讓程式結束時自動釋放儲存空間。
但 clear() 方法並不是不再用到而刪除,而是有全新的資料即將加入,因為有時候會以相同的串列空間來使用,可以節省儲存空間並且也在相同位址上找資料也會相對快一些。
結語
我們接著來筆記 dictionary 與 set 的部分,你是否在想 dictionary 就是你熟悉的那個單字嗎?是的,就是辭典的意思,而另一個單字也就是集合,兩者的翻譯也都有符合期待的功能,接著就來看看他們都能做些什麼?
This article was written by 洋洋. Any similarities to other works are purely coincidental.