資料結構 · 10 道範例題

Python 列表練習題與答案

列表是大多數初學者每天都會用到的第一個資料結構。這一頁檢查你是否能讀懂索引、原地修改列表,並在需要時選對方法。

82 道題在完整題庫中 · 21 道選擇 · 11 道填空 · 50 道輸出

這個主題考什麼

  • 不靠猜,正確讀寫索引和切片。
  • 分清會修改原列表的方法和回傳新列表的方法。
  • 知道什麼時候用迴圈,什麼時候用內建函式。

常見錯誤

  • 用 = 複製列表,兩個變數其實指向同一個列表。
  • 一邊走訪一邊刪除元素,應該走訪副本。
  • 以為 .sort() 會回傳排序後的列表;它回傳 None。
範例題

範例題

10

從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。

  1. 選擇題q0434

    1. 小明從奶茶訂單串列 orders = ["張三", "李四", "王五"] 取最後一單,orders[-1] 是?

    1. 張三
    2. 王五
    3. -1
    4. 報錯
    顯示答案

    答案

    B. 王五

    解析: 負索引從末尾往前數,-1 是最後一個元素,-2 是它前面那個。回傳的是 Carol 而不是數字 -1,只有越界才報 IndexError。

  2. 選擇題q0446

    2. 下列哪個值不能作為字典的鍵?

    1. 1
    2. (1, 2)
    3. [1, 2]
    4. "a"
    顯示答案

    答案

    C. [1, 2]

    解析: 鍵必須可雜湊,串列可變、雜湊會變,所以不能當鍵;元組、字串、整數都可以。用串列做鍵會拋 TypeError。

  3. 選擇題q0452

    3. 🧋 小明往訂單串列加新單,append 和 extend 的區別?

    1. 沒有區別
    2. append加一個元素,extend加多個元素
    3. extend加一個元素,append加多個
    4. append更快
    顯示答案

    答案

    B. append加一個元素,extend加多個元素

    解析: append 接收單個物件,追加串列會形成巢狀;extend 走訪參數並逐個加入。看長度增長多少就能判斷用了哪個。

  4. 選擇題q0470

    4. 執行 b = a 後,a 和 b 是什麼關係?

    1. 複製串列
    2. 指向同一物件
    3. 建立元組
    4. 深拷貝
    顯示答案

    答案

    B. 指向同一物件

    解析: 賦值只是給同一個物件再綁一個名字,從不複製。需要兩個獨立串列時用 copy() 或切片,否則改一個另一個也變。

  5. 填空題q0436

    5. 小明給重複下單的顧客去重:`list(set(['milk','tea','milk']))` 去重後有 ___ 個元素(填數字)

    顯示答案

    答案

    2

    解析: set 對每個不同字串只留一份,milk 和 tea 保留,長度為 2。順序不保證,別拿它當排序結果用,先去重再排序才穩定。

  6. 填空題q0453

    6. 🧋 小明往訂單串列加新單,在串列末尾添加元素用 ___ 方法

    顯示答案

    答案

    append

    解析: append 是只收一個參數、在末尾增長串列的方法。insert 要下標,extend 要可迭代物件,記不住時先想參數個數。

  7. 填空題q0474

    7. 複製串列的常用方法名是什麼?

    顯示答案

    答案

    copy

    解析: list.copy() 回傳淺拷貝,是可讀版的 a[:]。巢狀結構要改用 copy.deepcopy,否則內層仍然共用,複製方式決定改動傳播的範圍。

  8. 輸出預測q0435

    8. 這個切片列印什麼?

    orders = ["Alice", "Bob", "Carol"]
    print(orders[1:])
    顯示答案

    答案

    ['Bob', 'Carol']

    解析: 從下標 1 切到末尾,保留 Bob 和 Carol,丟掉第一個元素。起始下標包含在內,省略終止表示一直到結束。

  9. 輸出預測q0475

    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. 輸出預測q0492

    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 道,包含選擇題、填空題和輸出預測題。

什麼時候用列表,什麼時候用元組?

集合需要變化時用列表;形狀和順序固定,或需要可雜湊的鍵時用元組。

繼續保持練習節奏。

完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。

開啟完整練習