這個主題考什麼
- 不靠猜,正確讀寫索引和切片。
- 分清會修改原列表的方法和回傳新列表的方法。
- 知道什麼時候用迴圈,什麼時候用內建函式。
常見錯誤
- 用 = 複製列表,兩個變數其實指向同一個列表。
- 一邊走訪一邊刪除元素,應該走訪副本。
- 以為 .sort() 會回傳排序後的列表;它回傳 None。
範例題
從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。
-
1. 小明從奶茶訂單串列 orders = ["張三", "李四", "王五"] 取最後一單,orders[-1] 是?
顯示答案
答案
B. 王五解析: 負索引從末尾往前數,-1 是最後一個元素,-2 是它前面那個。回傳的是 Carol 而不是數字 -1,只有越界才報 IndexError。
-
2. 下列哪個值不能作為字典的鍵?
顯示答案
答案
C. [1, 2]解析: 鍵必須可雜湊,串列可變、雜湊會變,所以不能當鍵;元組、字串、整數都可以。用串列做鍵會拋 TypeError。
-
3. 🧋 小明往訂單串列加新單,append 和 extend 的區別?
顯示答案
答案
B. append加一個元素,extend加多個元素解析: append 接收單個物件,追加串列會形成巢狀;extend 走訪參數並逐個加入。看長度增長多少就能判斷用了哪個。
-
4. 執行 b = a 後,a 和 b 是什麼關係?
顯示答案
答案
B. 指向同一物件解析: 賦值只是給同一個物件再綁一個名字,從不複製。需要兩個獨立串列時用 copy() 或切片,否則改一個另一個也變。
-
5. 小明給重複下單的顧客去重:`list(set(['milk','tea','milk']))` 去重後有 ___ 個元素(填數字)
顯示答案
答案
2解析: set 對每個不同字串只留一份,milk 和 tea 保留,長度為 2。順序不保證,別拿它當排序結果用,先去重再排序才穩定。
-
6. 🧋 小明往訂單串列加新單,在串列末尾添加元素用 ___ 方法
顯示答案
答案
append解析: append 是只收一個參數、在末尾增長串列的方法。insert 要下標,extend 要可迭代物件,記不住時先想參數個數。
-
7. 複製串列的常用方法名是什麼?
顯示答案
答案
copy解析: list.copy() 回傳淺拷貝,是可讀版的 a[:]。巢狀結構要改用 copy.deepcopy,否則內層仍然共用,複製方式決定改動傳播的範圍。
-
8. 這個切片列印什麼?
orders = ["Alice", "Bob", "Carol"] print(orders[1:])顯示答案
答案
['Bob', 'Carol']解析: 從下標 1 切到末尾,保留 Bob 和 Carol,丟掉第一個元素。起始下標包含在內,省略終止表示一直到結束。
-
9. `annotate([])` 回傳什麼?
def annotate(garden): if not garden: return [] verify_board(garden) row_len = len(garden[0]) col_len = len(garden) board = [list(row) for row in garden] for index1 in range(col_len): for index2 in range(row_len): if board[index1][index2] != ' ': continue low = max(index2 - 1, 0) high = min(index2 + 2, row_len + 2) counts = garden[index1][low:high].count('*') if index1 > 0: counts += garden[index1 - 1][low:high].count('*') if index1 < col_len - 1: counts += garden[index1 + 1][low:high].count('*') if counts == 0: continue board[index1][index2] = str(counts) return [''.join(row) for row in board] def verify_board(garden): # Rows with different lengths row_len = len(garden[0]) if not all(len(row) == row_len for row in garden): raise ValueError('The board is invalid with current input.') # Unknown character in board character_set = set() for row in garden: character_set.update(row) if character_set - set(' *'): raise ValueError('The board is invalid with current input.') print(annotate([]))顯示答案
答案
[]解析: 守衛在 verify_board 之前就回傳 [],空花園根本進不了計數迴圈。沒有格子可標註,結果自然是空串列。
-
10. `spiral_matrix(5)` 回傳什麼?
def spiral_matrix(size): matrix = [[0]*size for row in range(size)] idx = 0 jdx = -1 element = 1 digital = [0, 1, 0, -1] disco = [1, 0, -1, 0] for edx in range(2*size - 1): for _ in range((2*size - edx) // 2): idx += digital[edx % 4] jdx += disco[edx % 4] matrix[idx][jdx] = element element += 1 return matrix print(spiral_matrix(5))顯示答案
答案
[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]解析: 5×5 螺旋是 16 格的外圈(1 到 16)包住 3×3 螺旋(17 到 25),因此中心格最終是 25。
常見問題
完整題庫裡有多少道列表題?
完整題庫中與列表課程對應的題目超過 80 道,包含選擇題、填空題和輸出預測題。
什麼時候用列表,什麼時候用元組?
集合需要變化時用列表;形狀和順序固定,或需要可雜湊的鍵時用元組。
繼續保持練習節奏。
完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。