甲居工作室

4.Python 串列(list)

日期:2024/04/05

4.Python 串列(list)

串列是一串 Python 的資料,將想要使用的資料內容放在兩個方括號[],各個資料可以有不同的資料型態。例如:

  1. tiles = ['1萬', '2萬', '3萬', '4萬', '5萬', '6萬', '7萬', '8萬', '9萬',
  2. '1筒', '2筒', '3筒', '4筒', '5筒', '6筒', '7筒', '8筒', '9筒',
  3. '1條', '2條', '3條', '4條', '5條', '6條', '7條', '8條', '9條',
  4. '東', '南', '西', '北', '白', '發', '中']

本章將開始介紹串列相關的方法 (method)、函式(function)與操作,部分內容與字串操作類似,本章將僅帶過。

4.1 串列操作

基本操作

存取、切片、組合、重複與字串操作類似

  1. strTiles = ['東', '南', '西', '北', '白', '發', '中']
  2. print(strTiles[3]) # 北
  3. print(strTiles[:9:2]) # ['東', '西', '白', '中']
  4. print(strTiles + ['紅寶牌']) # ['東', '南', '西', '北', '白', '發', '中', '紅寶牌']
  5. print(tiles[:2] * 3) # ['東', '南', '東', '南', '東', '南']

串列元素異動

串列 (List) 是 Python 中一種可變 (Mutable) 的資料結構。

  • 添加元素

    1. workdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
    2. workdays.append('Saturday')
  • 插入元素

    1. myList = [1, 2, 3]
    2. myList.insert(1, 4) # 在索引1的位置插入元素 4
    3. print(myList) # [1, 4, 2, 3]
  • 刪除元素

    1. myList = [1, 2, 3]
    2. del myList[1] # 刪除索引為1的元素
    3. print(myList) # [1, 3]
    4. myList.remove(3) # 刪除值為3的元素
    5. print(myList) # [1]
    6. poppedElement = myList.pop() # 取出並返回最後一個元素
    7. print(poppedElement) # 1
    8. print(myList) # []
  • 修改元素
    1. myList = [1, 2, 3]
    2. myList[0] = 10
    3. print(myList) # [10, 2, 3]

4.2 串列淺複製 (Shallow copy) 與深複製 (Deep copy)

在 Python 中,複製串列有兩種不同的方式:淺複製(Shallow copy)和深複製(Deep copy)。兩者之間的主要區別在於是否複製了串列中的內部對象。看不懂很正常我們來看下面的例子。

  1. A = [1, 2, [3, 4]]
  2. B = A
  3. A[0] = 5

你會驚奇的發現怎麽更改了 A 的元素 B 也更著改變,我們看一下下圖。

當你將另一個變數賦值給一個串列時,實際上是賦值該串列的指標。

淺複製 (Shallow copy)

先來說說淺複製的幾個方法

  • B = A.copy()
  • B = A[:]
  • B = list(A)


是的我複製出另外一個一樣的串列,所以我更改 B 時 A 不會更改改變,乍看之下是複製了 但是!但是!淺複製僅複製容器的記憶體的位址,如果修改了其中一個容器中的元素,另一個容器中的對應元素也會受到影響。

深複製 (Deep copy)

深複製需要 import copy 模組。

  1. import copy
  2. A = [1, 2, [3, 4]]
  3. B = copy.deepcopy(A)
  4. A[0] = 5

完全複製了一份副本,包括容器本身和容器中的元素,所以複製後的容器與原始容器完全獨立,彼此不會相互影響。

4.2 串列相關函式及方法

串列相關函式

函式說明
len(iterable)返回串列的長度
sorted(iterable, key=None, reverse=False)返回排序後的串列,但不修改原始串列。
max(iterable)取得最大值
min(iterable)取得最小值
sum(iterable)計算總和

串列相關方法

方法描述
str.join(iterable)使用str將串列組合。
list.append(element)在串列末尾添加一個元素。
list.insert(index, element)在指定索引位置插入一個元素。
list.extend(iterable)將可迭代對象中的元素添加到串列末尾。
list.remove(element)刪除串列中第一個出現的指定元素。
list.pop([index])刪除並返回指定索引位置的元素。
list.clear()清空串列中的所有元素。
list.index(element)返回指定元素在串列中第一次出現的索引。
list.count(element)返回指定元素在串列中出現的次數。
list.sort(key=None, reverse=False)對串列中的元素進行排序。
list.reverse()將串列中的元素反轉,會改變原始串列。
list[::-1]使用 slice 反轉串列,不會改變原始串列。
list.copy()返回一個串列的淺複製(Shallow copy)。

延伸閱讀

5.Python 字典(Dictionary)

Python 字典是一種無序、可變 (Mutable)的容器,用於儲存鍵(key)-值(value)對。字典由一對大括號 {} 構成,其中每個鍵與值對之間用冒號 : 分隔,鍵和值之間用逗號 , 分隔。

Read more

6.Python 邏輯判斷 (if、elif、else / match、case)

邏輯判斷 (if、elif、else / match、case)

Read more