序列的資料結構:目錄
- 序列的資料結構
- LIFO
- FIFO
- 比較資料結構
- 串列 v.s. Tuple v.s. 字典
- 製作更大的資料結構
- 串列 → Tuple(將每一個串列當成元素)
- 串列 → 串列的串列
- 串列 → 字典
- 唯一的限制就是這些資料類型本身
序列的資料結構
當你想要收集被傳進來的資料,並且想要先使用最舊的(FIFO),或最新的(LIFO)時,可善用他們
LIFO
- LIFO 序列的資料結構(後進先出)
- 使用 append() 將新項目附加到結尾,並用 pop() 從同一個結尾移除,代表你正在實作一種稱為 LIFO 序列的資料結構(後進先出)
後進
- 串列名稱 = ['字串1', '字串2', '字串3']
- 串列名稱.append('字串4')
- 串列名稱
- ['字串1', '字串2', '字串3', '字串4']
>>> marxes = ['Groucho', 'Chico', 'Harpo']
>>> marxes.append('Zeppo')
>>> marxes
['Groucho', 'Chico', 'Harpo', 'Zeppo']
>>>
先出
- 串列名稱 = ['字串1', '字串2', '字串3', '字串4']
- 串列名稱.pop()
- 串列名稱.pop(-1)
- '字串4'
>>> marxes = ['Groucho', 'Chico', 'Harpo', 'Zeppo']
>>> marxes.pop()
'Zeppo'
>>> marxes
['Groucho', 'Chico', 'Harpo']
>>> marxes = ['Groucho', 'Chico', 'Harpo', 'Zeppo']
>>> marxes.pop(-1)
'Zeppo'
>>> marxes
['Groucho', 'Chico', 'Harpo']
FIFO
- FIFO 序列的資料結構(先進先出)
- stack.pop(0) 會建立一個所謂的 FIFO(先進先出)序列
比較資料結構
串列:使用 [] 製作 Tuple:使用 , 製作 字典:使用 {} 製作
- 各種情況下,都可以用 [ ] 來存取單一元素
- 串列、Tuple:[整數位移植](對串列與Tuple而言,方括號內的值是整數位移植)
- 字典:[鍵](對字典而言,方括號內的值是鍵)
- 對這三者而言:結果都是值
串列 v.s. Tuple v.s. 字典
串列名稱 = ['字串1', '字串2', '字串3'] tuple名稱 = '字串1', '字串2', '字串3' 字典名稱 = {'鍵1':'值1', '鍵2':'值2', '鍵3':'值3'}
- 串列名稱[2] → '字串3'
- tuple名稱[2] → '字串3'
- 字典名稱['鍵3'] → '值3'
>>> marx_list = ['Groucho', 'Chico', 'Harpo']
>>> marx_tuple = 'Groucho', 'Chico', 'Harpo'
>>> marx_dict = {'Groucho': 'banjo', 'Chico': 'piano', 'Harpo': 'harpo'}
>>> marx_list[2]
'Harpo'
>>> marx_tuple[2]
'Harpo'
>>> marx_dict['Harpo']
'harpo'
製作更大的資料結構
已經用過簡單的布林、數字、字串、串列、tuple、集合、字典。你可以將這些內建的資料結構結合成更大型、複雜的個人專屬結構。
串列名稱1 = ['字串1', '字串2', '字串3'] 串列名稱2 = ['字串4', '字串5', '字串6', '字串7', '字串8'] 串列名稱3 = ['字串9', '字串10', '字串11']
>>> marxes = ['Groucho', 'Chico', 'Harpo']
>>> pythons = ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']
>>> stooges = ['Moe', 'Curly', 'Larry']
串列 → Tuple(將每一個串列當成元素)
- tuple 名稱 = 串列名稱1, 串列名稱2, 串列名稱3
- tuple 名稱
- (['字串1', '字串2', '字串3'], ['字串4', '字串5', '字串6', '字串7', '字串8'], ['字串9', '字串10', '字串11'])
>>> tuple_of_lists = marxes, pythons, stooges
>>> tuple_of_lists
(['Groucho', 'Chico', 'Harpo'], ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'], ['Moe', 'Curly', 'Larry'])
串列 → 串列的串列
- 串列名稱 all = [串列名稱1, 串列名稱2, 串列名稱3]
- 串列名稱 all
- [['字串1', '字串2', '字串3'], ['字串4', '字串5', '字串6', '字串7', '字串8'], ['字串9', '字串10', '字串11']]
>>> list_of_lists = [marxes, pythons, stooges]
>>> list_of_lists
[['Groucho', 'Chico', 'Harpo'], ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'], ['Moe', 'Curly', 'Larry']]
串列 → 字典
- 字典名稱 = {'鍵1':串列名稱1, '鍵2':串列名稱2, '鍵3':串列名稱3}
- 字典名稱
- {'鍵1': ['字串1', '字串2', '字串3'],
'鍵2': ['字串4', '字串5', '字串6', '字串7', '字串8'],
'鍵3': ['字串9', '字串10', '字串11'],
}
>>> dict_of_lists = {'Marxes': marxes, 'Pythons': pythons, 'Stooges': stooges}
>>> dict_of_lists
{'Marxes': ['Groucho', 'Chico', 'Harpo'], 'Pythons': ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'], 'Stooges': ['Moe', 'Curly', 'Larry']}
唯一的限制就是這些資料類型本身
- 字典鍵是不可變的,所以不能將串列、字典、集合當成其他字典的鍵。但是 Tuple 可以。
- 例如:可以用 GPS 座標來指引地圖,經緯度與高度(更多的地圖範例,請見本書 p387 "地圖")
>>> 字典名稱 = {
(tuple鍵1, tuple鍵2, tuple鍵3): '值1',
(tuple鍵4, tuple鍵5, tuple鍵6): '值2'
}
houses = {
(44.79, -93.14, 285): 'My House',
(38.89, -77.03, 13): 'The White House'
}