Python 列表是常用的資料結構,用於儲存一系列元素。列表操作方法豐富,例如 append 可在列表末尾新增元素,extend 將可迭代物件的元素新增到列表,insert 在指定位置插入元素。 count 統計元素出現次數,index 查詢元素索引,clear 清空列表,remove 刪除指定元素,pop 刪除並傳回指定索引元素。此外,reverse 反轉列表,copy 複製列表,sort 對列表排序。理解這些方法對於有效操作列表至關重要。集合則用於儲存唯一元素,提供 add, update, clear, union, intersection, difference 等方法,方便進行集合運算。矩陣則以二維列表表示,可透過索引存取和操作元素。

Python 列表操作方法詳解

在 Python 中,列表(List)是一種非常重要且常用的資料結構,用於儲存多個元素。本文將探討 Python 列表的各種操作方法,包括 appendextendinsertcountindexclearremovepop 等函式的使用方法和注意事項。

2.4.1 列表操作方法

2.4.1.1 Append

append 方法用於在列表的末尾新增一個元素。無論傳入的物件是什麼型別,它都會被當作一個整體新增到列表中。

lst = [1, 2, 3]
lst.append(4)
print(lst)  # 輸出:[1, 2, 3, 4]
lst.append([5, 6])
print(lst)  # 輸出:[1, 2, 3, 4, [5, 6]]

#### 內容解密:

  • append 方法將傳入的物件直接新增到列表末尾。
  • 如果傳入的是可迭代物件(如列表),它將被視為單一元素。

2.4.1.2 Extend

extend 方法用於將可迭代物件中的所有元素新增到列表的末尾。如果傳入的物件不是可迭代的,將會引發 TypeError

lst = []
lst.extend('learning')
print(lst)  # 輸出:['l', 'e', 'a', 'r', 'n', 'i', 'n', 'g']
lst.extend([1, 2, 3])
print(lst)  # 輸出:['l', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 1, 2, 3]

#### 內容解密:

  • extend 方法需要傳入可迭代物件,如字串或列表。
  • 字串會被拆分成單個字元並逐一新增到列表中。
  • 如果要新增整體字串,需使用 append 或先將字串放入列表中。

2.4.1.3 Insert

insert 方法用於在指定索引位置插入一個元素。

lst = [1, 8, 9, '8', 7, 6]
lst.insert(-2, 'objj')
print(lst)  # 輸出:[1, 8, 9, '8', 'objj', 7, 6]

#### 內容解密:

  • insert 方法的第一個引數是索引位置,第二個引數是要插入的元素。
  • 如果索引為負數,則從列表末尾開始計算。

2.4.1.4 Count

count 方法用於統計指定元素在列表中出現的次數。

lst = [1, 'data', 8, 9, 7, '8', 'objj', 7, 6]
c = lst.count(7)
print(c)  # 輸出:2

#### 內容解密:

  • count 方法傳回指定元素在列表中的出現次數。
  • 如果元素不存在,傳回 0

2.4.1.5 Index

index 方法用於查詢指定元素在列表中的索引位置。如果元素不存在,將引發 ValueError

lst = [1, 'data', 8, 9, 7, 8, 7, 6]
c = lst.index(8)
print(c)  # 輸出:2

#### 內容解密:

  • index 方法傳回指定元素第一次出現的索引位置。
  • 可以指定查詢範圍,如 lst.index(obj, start, end)

2.4.1.6 Clear

clear 方法用於清空列表中的所有元素。

lst = [1, 'data', 8, 9, 7, '8', 7, 6]
lst.clear()
print(lst)  # 輸出:[]

#### 內容解密:

  • clear 方法直接清空列表,無需重新指定。
  • 也可透過重新指定空列表來達到相同效果,如 lst = []

2.4.1.7 Remove

remove 方法用於刪除列表中第一次出現的指定元素。如果元素不存在,將引發 ValueError

lst = [1, 'data', 8, 9, 7, '8', 7, 6]
lst.remove(8)
print(lst)  # 輸出:[1, 'data', 9, 7, '8', 7, 6]

#### 內容解密:

  • remove 方法刪除第一次出現的指定元素。
  • 如果元素不存在,會引發錯誤。

2.4.1.8 Pop

pop 方法用於刪除並傳回指定索引位置的元素。如果未指定索引,預設刪除並傳回最後一個元素。

lst = [1, 'data', 8, 9, 7, '8', 7, 6]
lst.pop(3)
print(lst)  # 輸出:[1, 'data', 8, 7, '8', 7, 6]

#### 內容解密:

  • pop 方法刪除並傳回指定索引位置的元素。
  • 如果索引超出範圍,將引發 IndexError

Python基礎:List、Array與Matrix的操作與應用

在Python程式設計中,List(串列)是一種非常重要且常用的資料結構。除了基本的List操作外,Array(陣列)與Matrix(矩陣)也是常見的資料表示方式。本篇文章將探討List的各種操作、Array的特性以及Matrix的實作方法。

List的操作

List提供了多種內建方法來進行元素的操作,包括新增、刪除、反轉等。

反轉List:reverse()方法

reverse()方法用於反轉List中的元素順序。該方法不接受任何引數,直接修改原List。

lst = [1, 'data', 8, 9, 7, '8', 7, 6]
lst.reverse()
print(lst)
# 輸出:[6, 7, '8', 7, 9, 8, 'data', 1]

複製List:copy()方法

直接使用指定運算元(如lst2 = lst1)並不會建立一個新的List副本,而是讓兩個變數指向同一個List物件。若要建立List的副本,可以使用copy()方法。

lst1 = [1, 'learn', 8, 9, 7, '8', 7, 6]
lst2 = lst1.copy()
lst1.remove('learn')
print(lst1)
# 輸出:[1, 8, 9, 7, '8', 7, 6]
print(lst2)
# 輸出:[1, 'learn', 8, 9, 7, '8', 7, 6]

List的巢狀結構

巢狀List是指一個List中包含另一個或多個List。存取巢狀List中的元素需要使用多個索引。

nlst = [
    [5.69, 8, 4.6],
    ['x', 'a', 0.88],
    [66, 7.7, '8']
]
val = nlst[1]
print(val)
# 輸出:['x', 'a', 0.88]
val = nlst[0][1]
print(val)
# 輸出:8
val = nlst[2][2]
print(val)
# 輸出:'8'

Array的特性與操作

在Python中,雖然沒有專門的Array型別,但可以使用List來模擬Array的行為。Array中的元素必須是相同型別,且存取速度較快。

Array的排序:sort()方法

sort()方法可以對Array中的元素進行排序。該方法接受兩個可選引數:reversekey

arr = [3, 86, 5, 7, 2, 9]
arr.sort()
print(arr)
# 輸出:[2, 3, 5, 7, 9, 86]
arr.sort(reverse=True)
print(arr)
# 輸出:[86, 9, 7, 5, 3, 2]

Matrix的實作與操作

Matrix是一種二維資料結構,可以使用巢狀List來表示。每個內部List代表Matrix的一行,且每個行的元素數量必須相同。

mat = [
    [5, 8, 4, 6],
    [88, 4, 32, 41],
    [12, 3, 0, -1]
]
val = mat[1][2]
print(val)
# 輸出:32

綜上所述,Python中的List、Array和Matrix提供了多樣化的資料表示和操作方法。瞭解這些資料結構的特性和操作方法,有助於提升程式設計的效率和可讀性。

Python基礎:矩陣與集合操作深度解析

在Python程式設計中,矩陣與集合是兩種非常重要且常用的資料結構。本文將探討這兩種資料結構的使用方法及其相關操作。

矩陣操作實務

矩陣在Python中通常以二維串列(list)的形式呈現。以下是一個簡單的矩陣範例:

mat = [
    [5, 8, 4, 6],
    [88, 4, 32, 41],
    [66, 3, 19, 4]
]

矩陣元素的存取與運算

我們可以輕鬆地存取矩陣中的元素並進行各種運算。例如:

c = mat[1]
print(c)  # 輸出: [88, 4, 32, 41]

c = mat[1][2] + mat[1][0]
print(c)  # 輸出: 120 (32 + 88)

內建函式的應用

Python的內建函式同樣適用於矩陣操作。例如,使用count()函式:

c = mat[0].count(mat[0][1])
print(c)  # 輸出: 1

內容解密:

  1. mat[1] 存取第二行元素,輸出整個串列。
  2. mat[1][2] + mat[1][0] 對特定元素進行加法運算。
  3. mat[0].count(mat[0][1]) 統計第一行中與第二個元素相同的值的數量。

修改串列元素

串列(list)是可變的資料結構,我們可以隨時修改其中的元素。例如:

arr = [3, 4, 9, 6, 0, 330]
arr[0] = 81
arr[4] = 23
print(arr)  # 輸出: [81, 4, 9, 6, 23, 330]

內容解密:

  1. arr[0] = 81 將第一個元素修改為81。
  2. arr[4] = 23 將第五個元素修改為23。

集合(Set)操作詳解

集合是一種儲存唯一元素的無序資料結構,具有以下特性:

  • 非索引化:無法透過索引存取元素。
  • 不可變更元素:可以新增或刪除元素,但無法直接修改現有元素。
  • 自動去除重複元素。

建立集合

使用大括號{}set()函式可以建立集合:

se = {3, 4, 7, 6, 0, 9, 3, 7}
print(se)  # 輸出: {0, 3, 4, 6, 7, 9} (自動去除重複元素)

se = {7, 6, 'learn', 'a', 'b', 'a'}
print(se)  # 輸出: {'learn', 6, 7, 'b', 'a'} (注意順序是無序的)

常見集合操作

新增元素:add() 與 update()
se = {0, 3, 4, 21, 6, 7, 9}
se.add(21)       # 新增單一元素
se.update([79, 'you'])  # 新增多個元素(可迭代物件)
print(se)        # 輸出: {0, 3, 4, 6, 7, 9, 21, 'you', 79}

內容解密:

  1. se.add(21) 新增單一元素,若元素已存在則無效。
  2. se.update([79, 'you']) 將可迭代物件中的元素新增至集合。
清空集合:clear()
se = {0, 3, 4, 21, 6, 7, 9}
se.clear()
print(se)        # 輸出: set() (空集合)

聯集、交集與差集操作

  • 聯集(Union):se.union(iter_obj)
  • 交集(Intersection):se.intersection(iter_obj)
  • 交集更新(Intersection Update):se.intersection_update(iter_obj)
se0 = {0, 3, 4, 21, 6, 7, 9}
se1 = {89, 890}

# 聯集操作
se = se0.union(se1)
print(se)        # 輸出: {0, 3, 4, 6, 7, 9, 21, 89, 890}

# 交集操作
se0 = {0, 3, 4, 21, 6, 7, 9}
se1 = {89,890}
print(se0.intersection(se1))   # 輸出: set() (空集合,因無共同元素)

# 交集更新操作
se0.intersection_update(se1)
print(se0)       # 輸出: set() (因無共同元素,變為空集合)

其他集合操作

  • discard(elem):移除指定元素,若不存在則無動作。
  • remove(elem):移除指定元素,若不存在則引發錯誤。
  • pop():隨機移除並傳回一個元素。
se = {0, 3, 4, 21}
se.discard(4)    # 安全移除,存在則移除,不存在無動作
print(se)        # 輸出: {0,3 ,21}

se.remove(21)    # 直接移除,存在則移除,不存在引發 KeyError
print(se)        # 輸出: {0 ,3}

d = se.pop()     # 無預警移除任意一個並回傳該值
print(d)         # 可能輸出:0 或是其他值(因順序不固定)

Python基礎:集合與字典操作詳解

集合運算:差集

使用 se.difference(iter_obj) 方法,可以取得 se 中存在但 iter_obj 中不存在的元素。

se0 = {0, 3, 4, 21, 6, 7, 9}
se1 = {7, 8, 3, 19, 4, 'word'}
ls1 = [7, 8, 3, 19, 4, 'word']

se = se0.difference(ls1)
print(se)  # 輸出:{0, 21, 6, 9}

se = se1.difference(se0)
print(se)  # 輸出:{8, 19, 'word'}

內容解密:

  1. se0.difference(ls1) 傳回 se0 中存在但 ls1 中不存在的元素,即 {0, 21, 6, 9}
  2. se1.difference(se0) 傳回 se1 中存在但 se0 中不存在的元素,即 {8, 19, 'word'}

此外,也可以使用 - 運算子來計算差集,但它僅適用於集合之間的操作。

se0 = {0, 3, 4, 21, 6, 7, 9}
se1 = {7, 8, 3, 19, 4, 'word'}

se = se0 - se1
print(se)  # 輸出:{0, 9, 21, 6}

se = se1 - se0
print(se)  # 輸出:{8, 19, 'word'}

# 若嘗試使用列表進行運算,將會引發 TypeError
# se = se0 - ls1
# print(se)  # 輸出:TypeError: unsupported operand type(s) for -: 'set' and 'list'

內容解密:

  1. se0 - se1 傳回 se0 中存在但 se1 中不存在的元素。
  2. se1 - se0 傳回 se1 中存在但 se0 中不存在的元素。
  3. 當嘗試對集合和列表進行 - 操作時,會引發 TypeError,因為 - 操作僅支援集合之間的運算。

複製集合

當直接將一個集合指定給另一個變數時,實際上是參考了同一個集合物件。要建立一個新的集合副本,可以使用 copy() 方法。

se1 = {1, 'learn', 8, 9, 7, '8', 7, 6}
se2 = se1.copy()
se1.discard('learn')

print(se1)  # 輸出:{1, '8', 6, 7, 8, 9}
print(se2)  # 輸出:{1, 'learn', '8', 6, 7, 8, 9}

內容解密:

  1. 使用 copy() 方法建立 se1 的副本並指定給 se2
  2. se1 的修改不會影響 se2,因為它們是兩個獨立的集合物件。

子集檢查

使用 se.issubset(iter_obj) 方法,可以檢查 se 是否為 iter_obj 的子集。

lst = [1, 'learn', 8, 9, 7, '8', 7, 6]
se2 = {8, 7, 9}
se3 = se2.issubset(lst)
print(se3)  # 輸出:True

se1 = {1, 'learn', 8, 9, 7, '8', 7, 6}
se3 = se2.issubset(se1)
print(se3)  # 輸出:True

se2 = {8, 7, 9, 11}
se3 = se2.issubset(lst)
print(se3)  # 輸出:False

內容解密:

  1. se2 的所有元素都存在於 lstse1 中時,issubset() 傳回 True
  2. se2 中有元素不在 lst 中(如元素 11),則傳回 False

建構集合

使用 set() 建構函式,可以將任意可迭代物件轉換為集合,從而去除重複元素。

lst = set(['country', 17, 'x', 17])
print(lst)  # 輸出:{'country', 'x', 17}

lst = set('learning')
print(lst)   # 輸出:{'n', 'i', 'r', 'e', 'l', 'a', 'g'}

lst = set('country')
print(lst)   # 輸出:{'n', 'c', 'u', 'r', 't', 'o', 'y'}

lst = set(['country',17])
print(lst)   # 輸出:{'country',17}

利用此方法,我們可以輕鬆地從列表或字串中移除重複元素。