Semorphe

清單

一個名字,裝一整排東西。 · ⏱ 約 30 分鐘

你會學到三件事

  1. list 用方括號,裡面可以放任何東西
  2. 位置從 0 開始,而 -1 是最後一個
  3. 切片 [a:b] 取一段

開始之前

想記住五個分數,可以用五個變數。但那樣沒辦法用迴圈處理,因為每個名字都不一樣。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、做一個

照著打上這一行:

1nums = [3, 1, 4, 1, 5]
31415串列設定nums為1

方括號、逗號隔開。裡面可以放不同型別,[1, "a", True] 是合法的,而實務上通常放同一種。

積木盤上它叫「串列」——list 的中文說法。

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1print(len(nums))      # 5   ← 有幾個
變數nums的長度印出1

len 那顆積木寫著「… 的長度」。

二、拿第幾個

要拿其中一個,用方括號加上編號:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1print(nums[0])        # 3    ← 第一個2print(nums[4])        # 5    ← 第五個3print(nums[-1])       # 5    ← 🟢 最後一個4print(nums[-2])       # 1    ← 倒數第二個
變數nums0取的變數nums4取的變數nums1取負取的變數nums2取負取的印出印出印出印出1234
  3    1    4    1    5
 [0]  [1]  [2]  [3]  [4]
 [-5] [-4] [-3] [-2] [-1]

⚠️ 位置從 0 開始,所以五個東西的最大位置是 4。再往後的 nums[5] 會丟 IndexError,Python 會攔你,而很多語言不會。

Python 還有負索引:nums[-1] 就是最後一個,不用寫 nums[len(nums) - 1]。

三、改和加

改一個、加一個:

1nums[0] = 99          # 改第一個2nums.append(9)3print(nums)           # [99, 1, 4, 1, 5, 9]
變數nums0取的99變數nums9變數nums印出在末端加入把設成123

append 那顆寫著「在 … 末端加入 …」。

寫法 做什麼
x.append(v) 最後面加一個
x.insert(i, v) 在位置 i 插入
x.pop() 拿掉最後一個並回傳它
x.remove(v) 拿掉第一個等於 v 的
x.sort() 原地排序

⚠️ 那個「點」的寫法是新的,唸成「的」:nums.append(...) 就是「nums 的 append」。 點的左邊是誰,右邊是叫它做什麼。之後會一直出現。

⚠️ nums.sort() 改的是原本那個,回傳 None:

nums = nums.sort()    # 🔴 nums 變成 None
nums.sort()           # ✅
sorted(nums)          # ✅ 這個才是回傳新的

四、切片

要一次拿好幾個,中間加一個冒號:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1print(nums[1:3])      # [1, 4]    ← 位置 1 到 2
變數nums13取從到,每次跳印出1

⚠️ 含頭不含尾,又是那個約定。

切片那顆積木有第三個格子「每次跳 …」,那是步長(nums[::2] 的 2)。

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1nums[:3]      # 前三個2nums[2:]      # 從位置 2 到最後3nums[:]       # 整份【複本】4nums[::-1]    # 反過來
變數nums3取從到,每次跳變數nums2取從到,每次跳變數nums取從到,每次跳變數nums1取負取從到,每次跳1234

五、走過整排

走過每一個,用 for:

1for n in nums:2    print(n)
變數nums變數n印出對裡的每一個i12

上一課的 for ... in 直接就通,因為清單就是一串東西。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1nums = [3, 1, 4, 1, 5]2print(nums[0])3print(len(nums))4nums.append(9)5print(nums)6print(nums[1:3])7for n in nums:8    print(n)
31415串列變數nums0取的變數nums的長度變數nums9變數nums變數nums13取從到,每次跳變數nums變數n印出對裡的每一個i印出印出在末端加入印出印出設定nums為12345678

把積木打散,自己排回去:排回去:把剛才那支程式的積木排好

換你了

讀進五個數字放進清單,印出最大值、最小值、平均。

⚠️ 提示:max(nums)、min(nums)、sum(nums) 都是內建的。 先查有沒有現成的,再自己寫迴圈。

到編輯器做這一題:練習:最大值、最小值、平均

做一個

1 到 5 號五位候選人。先讀票數 n,再讀 n 張票。 印出每個人的得票(號碼 票數,五行),最後印 當選 X。

⚠️ 裁判餵的是 7 張票:3 1 3 5 3 1 2。

🔴 先想一下如果用五個變數要寫成什麼樣子,再回頭看清單版,那個差別就是這一課。 平手怎麼辦沒有規定,你自己決定,再跟旁邊的人比一下規則。

到編輯器做這一題:做一個:投票統計

這一課你做了什麼

如果卡住了

你看到 多半是因為
IndexError 位置超出範圍。五個東西最大是 [4]
nums 變成 None 寫了 nums = nums.sort()。sort() 是原地改的
改了一個清單另一個也變了 兩個名字指向同一份。要複本用 nums[:]
切片少一個 含頭不含尾
在編輯器打開這一課 →