四種容器
一個語言內建四種裝東西的方式。 · ⏱ 約 35 分鐘
你會學到三件事
list / dict / set / tuple 各裝什麼、各長什麼樣
- 四種括號:
[] {} {} ()
- 可變和不可變的差別
開始之前
C++ 的 vector / map / set 要 #include、要寫型別參數。
Python 這四種是內建的、有專屬語法的,所以它們是這個語言的日常,
不是「進階題材」。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、四種,一眼看完
四種放在一起比:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1nums = [3, 1, 4] # list ——有順序、可以重複、可以改2ages = {"ming": 16, "hua": 17} # dict ——鍵 → 值3tags = {"a", "b"} # set ——不重複、沒順序4point = (1, 2) # tuple ——像 list,而【不能改】
|
C++ 的對應 |
括號 |
list |
vector |
[ ] |
dict |
map |
{ 鍵: 值 } |
set |
set |
{ 值 } |
tuple |
pair / tuple |
( ) |
積木盤上它們各有一顆,寫著「串列」「字典」「集合」「固定組合」
——最後那個就是 tuple(它「固定」在不能改)。
⚠️ dict 和 set 都用大括號。 分辨的方式是裡面有沒有冒號。
⚠️ {} 是空的 dict,不是空的 set。 空的 set 要寫 set()。
二、拿東西
拿的寫法都是方括號:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1print(nums[0]) # 32print(ages["ming"]) # 163print(point[1]) # 2
list 和 tuple 用位置、dict 用鍵,而寫法一樣是方括號。
⚠️ set 不能用方括號拿,因為它沒有順序。它只回答「在不在裡面」:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1print("a" in tags) # True
三、加東西
底下這幾顆在積木上是「在 … 末端加入 …」與「… 的長度」。
加的寫法各有各的:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1nums.append(5) # list → [3, 1, 4, 5]2ages["new"] = 18 # dict → 多一個鍵3tags.add("c") # set → 已經有的話不會變多
⚠️ 三個名字都不一樣(append / []= / add),這是要背的。
len(x) 對四種都通:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
四、⚠️ tuple 不能改
tuple 做好就不能改:
🚫 這一段是反例——課文在說不要這樣寫,別照著拉。
1point[0] = 9 # 💥 TypeError
這不是限制,是保證。
「不會被改」讓它可以當 dict 的鍵、可以安心傳來傳去。
座標、日期、一組回傳值,這些東西本來就不該中途變。
可變是能力,不可變是承諾。
需要承諾的地方用 tuple,需要能力的地方用 list。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1nums = [3, 1, 4]2ages = {"ming": 16, "hua": 17}3tags = {"a", "b"}4point = (1, 2)5print(nums[0])6print(ages["ming"])7nums.append(5)8print(len(nums))9print(len(tags))10print(point[1])
換你了
用一個 dict 記三個人的分數,然後印出分數最高的那個人的名字。
提示:for name in scores: 走過的是鍵。
到編輯器做這一題:練習:印出分數最高的那個人的名字
做一個
一串有重複的數字 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]。
印出原本幾個、去重之後幾個、以及排好的結果。
🔴 這一題用兩種容器:一種負責去重,一種負責保留順序。
⚠️ 想一下為什麼不能只用其中一種。
到編輯器做這一題:做一個:去掉重複再排好
這一課你做了什麼
- 你做出了四種容器,各用各的括號
- 你用位置、用鍵、用
in 分別取到了東西
- 你知道
tuple 不能改,而那是它的用處
如果卡住了
| 你看到 |
多半是因為 |
{} 拿到的是 dict 不是 set |
空的 set 要寫 set() |
KeyError |
dict 裡沒有那個鍵。先用 in 問一下 |
TypeError: 'tuple' object does not support... |
tuple 不能改 |
| set 裡的東西順序每次不一樣 |
set 本來就沒有順序 |
nums.add(5) 出錯 |
list 用 append,set 才用 add |
在編輯器打開這一課 →