Python基礎資料結構課程講義 - Python程式基礎速成保證班 - Cupoy
Python 基礎資料結構 串列(List) 我們可以用一個變數來包含多個變數,這在 Python 裡面叫做串列(List)。表達的方式如下: a = [1, 2, 3, 4, 5] b = []...
Python 基礎資料結構 串列(List) 我們可以用一個變數來包含多個變數,這在 Python 裡面叫做串列(List)。表達的方式如下: a = [1, 2, 3, 4, 5] b = [] 可以看到範例中的 a 包含了 1, 2, 3, 4, 5,而 b 什麼都沒有包含。 串列在宣告後,還是可以追加內容,如下例所示: a = [] b = 10 a.append(b) a.append("hello") 這段程式執行後可以看到 a 包含了10與 "hello",這些值都是在 a 被宣告後再追加到串列的最後面的。也可看到一個串列中可以同時儲存不同的資料,不限型態。 使用 [n] 來取得第 n 項元素,n從0開始數,如下例: a = [0, "hello", 3.1415926, 'a'] print(a[3]) print(a[0]) 所以這個範例將輸出 "a" 與 "0" 兩行字。取得的元素除了可以存取也可以修改,如下例所示: a = [0, "hello", 3.1415926, 'a'] a[0] = "blah" print(a[0]) 這個程式將會輸出 "Blah" ,因為串列中的第一項已經被修改成"Blah" 了。 要注意到 list 是可以裝 list 的,如下所示: a = [1, 2, 3 [0 ,1 ,2], 4, "a", ["hello", "kitty"]] print(a[3]) # 輸出: [0, 1, 2] print(a[6][1]) # 輸出: kitty 另外要注意串列的指定是不做複製的,我們用範例解釋這個現象: a = [0, "hello", 3.14, 'a'] b = a b[2] = 1 print(a[2]) 這個範例的輸出將不會是 3.14 ,而會是 1 ,因為 a 與 b 是同一個串列,而不是不同的串列。我們稱這個概念叫做取參考(Reference)。 我們可以將串列中的某一段複製出來,這個動作叫做切片(slice),我們可以用 [n:m] 的語法來表示要取用 n ~ m-1 區間,語法如範例所示: a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(a[1:4]) print(a[:4]) print(a[1:]) print(a[4:-2]) 這支程式會輸出: [2, 3, 4] [1, 2, 3, 4] [2, 3, 4, 5, 6, 7, 8, 9, 10] [5, 6, 7, 8] 其中比較令人難懂的應該是n與m皆允許出現負數,用來表示相對於串列結尾的位置,比如範例中最後一行的輸出便是從第 4 項取到倒數第 2 項(包含倒數第2項)。 接著是反轉一個串列,在 Python 裡面這可以很方便的使用 reverse 這個函數做到,如範例所示: a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] reversed(a) # 回傳一個 iterator list(reversed(a)) # 輸出: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 可以注意到 reverse 回傳的結果並不是 list,若要取得反轉後的 list 則需要轉型,reverse回傳值的型別會在後面的章節提及。 數組(Tuple) 可以看作是不可增長也不可修改值的 list,這在函數需要回傳多個值的時候非常好用,tuple 基本的語法如下: a = (1, 'a') b = "hello", "kitty" # 等號左右與return可以忽略括號 print(b[0]) # 輸出: hello print(b[1]) # 輸出: hello 要注意的是,因為 tuple 不可修改,所以 [] 只有存取是合法的,寫入則會導致錯誤。 字典(Dictionary) 字典是一種鍵值對應表,鍵值對應表可以想成是一個容器,就好像串列,可以儲存元素,但不同之處在於,字典沒有順序的概念,取用元素時使用「鍵」(key)來取代「第幾個」。聽起來有點難懂,看範例會比較好解釋: a = { "hello": 1, "wut": "meow", 1: 2, } print(a["hello"]) # 輸出: 1 print(a[1]) # 輸出: 2 print(a['wut']) # 輸出: meow 使用{}來建立字典,使用[]來取得裡面的元素,只不過存取字典時,[]內不只可以用數字存取,其他型別(比如字串)也都能使用。 編輯字典也與編輯 list 相似,可以看以下範例: a = { "hello": 1, "wut": "meow", } a["hello"] = a["wut"] a["wut"] = 1 a[10] = 100 print(a) # 輸出: {'hello': 'meow', 'wut': 1, 10: 100} 字典也如 list 一樣允許嵌套結構,如範例 a = { "hello": 1, "cat": "meow", 1: { "wolf": "狗狗", "cat": "Something different" }, } print(a[1]['cat']) # 輸出: Something different print(a[1]) # 輸出: {"wolf": "狗狗","cat": "Something differenct"} print(a["cat"]) # 輸出: meow 字典中有一些常用的函數這裡拿出來介紹。.key()與.values()可以用來取得所有的鍵與所有的值。.items()則會取得 (鍵,值) 的數組。這些函數的回傳值都是iterator,所以如果想要作為list存取則需要額外轉型。可以看範例: a = {'hello': 'meow', 'wut': 1, 10: 100} print(list(a.keys())) # 輸出: ['hello', 'wut', 10] print(list(a.values())) # 輸出: ['meow', 1, 100] print(list(a.items())) # 輸出: [('hello', 'meow'), ('wut', 1), (10, 100)]