Python 列表是常用的資料結構,用於儲存一系列元素。列表操作方法豐富,例如 append 可在列表末尾新增元素,extend 將可迭代物件的元素新增到列表,insert 在指定位置插入元素。 count 統計元素出現次數,index 查詢元素索引,clear 清空列表,remove 刪除指定元素,pop 刪除並傳回指定索引元素。此外,reverse 反轉列表,copy 複製列表,sort 對列表排序。理解這些方法對於有效操作列表至關重要。集合則用於儲存唯一元素,提供 add, update, clear, union, intersection, difference 等方法,方便進行集合運算。矩陣則以二維列表表示,可透過索引存取和操作元素。
Python 列表操作方法詳解
在 Python 中,列表(List)是一種非常重要且常用的資料結構,用於儲存多個元素。本文將探討 Python 列表的各種操作方法,包括 append、extend、insert、count、index、clear、remove 和 pop 等函式的使用方法和注意事項。
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中的元素進行排序。該方法接受兩個可選引數:reverse和key。
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
內容解密:
mat[1]存取第二行元素,輸出整個串列。mat[1][2] + mat[1][0]對特定元素進行加法運算。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]
內容解密:
arr[0] = 81將第一個元素修改為81。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}
內容解密:
se.add(21)新增單一元素,若元素已存在則無效。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'}
內容解密:
se0.difference(ls1)傳回se0中存在但ls1中不存在的元素,即{0, 21, 6, 9}。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'
內容解密:
se0 - se1傳回se0中存在但se1中不存在的元素。se1 - se0傳回se1中存在但se0中不存在的元素。- 當嘗試對集合和列表進行
-操作時,會引發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}
內容解密:
- 使用
copy()方法建立se1的副本並指定給se2。 - 對
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
內容解密:
- 當
se2的所有元素都存在於lst或se1中時,issubset()傳回True。 - 若
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}
利用此方法,我們可以輕鬆地從列表或字串中移除重複元素。