分類彙整: python_note

[Python] [Dict] 學習筆記

dict (字典)

最常用的內置數據結構之一,用於存儲鍵值對(key-value pairs)
字典是可變的、無序的(Python 3.7+ 後插入順序被保留),並且鍵必須是唯一的且不可變的(如字串、數字、元組等)

特性:

  • 鍵必須是唯一的:如果重複鍵,後面的值會覆蓋前面的值
  • 鍵必須是不可變的:鍵可以是字串、數字、元組等不可變類型,但不能是列表或字典等可變類型
  • 值可以是任意類型:值可以是字串、數字、列表、字典等
  • 無序性(Python 3.6 之前):在 Python 3.6 之前,字典是無序的。從 Python 3.7 開始,字典會保留插入順序

建立 dict

 

常用方法 (python 3.11)

keys()
返回字典中所有鍵的視圖

 

values()
返回字典中所有值的視圖

 

items()
返回字典中所有鍵值對的視圖

 

get(key[, default])
如果 key 存在於字典中則傳回 key 的值,否則傳回 default
如果 default 未給出則預設為 None,因而此方法絕不會引發 KeyError

 

update([other])
將另一個字典或鍵值對更新到當前字典中。如果鍵已存在,則覆蓋其值

 

pop(key[, default])
刪除並返回指定鍵對應的值。如果鍵不存在且未提供默認值,則拋出 KeyError

 

popitem()
刪除並返回字典中最後插入的鍵值對(Python 3.7+ 後字典保留插入順序)。如果字典為空,則拋出 KeyError

 

clear()
清空字典中的所有鍵值對

 

copy()
返回字典的淺拷貝

 

setdefault(key[, default])
如果鍵存在,則返回其值;如果鍵不存在,則插入鍵並設置默認值

 

fromkeys(iterable[, value])
從可迭代對象創建一個新字典,並將所有鍵的值設置為指定的默認值

 

常用操作:

len(dict)
返回字典中鍵值對的數量

 

in 操作符
檢查鍵是否存在於字典中

 

遍歷
遍歷鍵/值/鍵值對

 

 

 

[Python] [Set] 學習筆記

集合 (Set):

set 是一種內建的資料結構,用於儲存唯一且無序的元素集合

特點:

  • 唯一性:set 中的元素不會重複,即使你嘗試加入重複的元素,set 也會自動忽略
  • 無序性:set 中的元素沒有固定的順序,因此不能通過索引來訪問元素
  • 可變性:set 是可變的,可以動態地添加或刪除元素
  • 支援集合運算:set 支援交集、聯集、差集等數學集合運算

 

建立 set

 

set 相關方法:

add(element)
將單個元素添加到 set 中
如果元素已經存在,則不會有任何變化

 

update(iterable)
將一個可迭代對象(如列表、元組、集合等)中的所有元素添加到 set 中
如果元素已經存在,則會被忽略
S |= T

 

remove(element)
刪除 set 中的指定元素
如果元素不存在,會拋出 KeyError 錯誤

 

discard(element)
刪除 set 中的指定元素
如果元素不存在,不會拋出錯誤

 

pop()
隨機刪除並返回 set 中的一個元素
如果 set 為空,會拋出 KeyError 錯誤

 

clear()
清空 set 中的所有元素

 

union(*others)
返回當前 set 與其他集合的聯集
等同於使用 | 運算符
S | T

 

intersection(*others)
返回當前 set 與其他集合的交集
等同於使用 & 運算符

 

difference(*others)
返回當前 set 與其他集合的差集
等同於使用 – 運算符

 

symmetric_difference(other)
返回當前 set 與另一個集合的對稱差集(即兩個集合中獨有的元素)
等同於使用 ^ 運算符

 

intersection_update(*others)
更新當前 set,只保留與其他集合的交集

 

difference_update(*others)
更新當前 set,移除與其他集合共有的元素

 

symmetric_difference_update(other)
更新當前 set,只保留與另一個集合的對稱差集
S ^= T

 

issubset(other)
檢查當前 set 是否是另一個集合的子集
等同於使用 <= 運算符

 

issuperset(other)
檢查當前 set 是否是另一個集合的超集
等同於使用 >= 運算符

 

isdisjoint(other)
檢查當前 set 與另一個集合是否沒有共同元素

 

set 相關操作:

len()
返回集合中的元素個數

 

in 運算符
檢查元素是否存在於集合中

 

sorted()
返回一個排序後的列表(set 本身無序)

 

min()、max() 和 sum()
min(): 返回集合中的最小值
max(): 返回集合中的最大值
sum(): 返回集合中所有元素的總和

 

frozenset
創建一個不可變的集合,可以作為字典的鍵或集合的元素

 

[Python] [tuple] 學習筆記

元組(tuple):

Python 中的一種內置資料結構,用於儲存有序且不可變(immutable)的元素集合
與 list 不同,tuple 一旦創建後,其內容無法修改(例如添加、刪除或更改元素)
正因為其不可變性,tuple 通常用於儲存不應被修改的數據,例如固定配置、常量值或作為字典的鍵

特性:

  • 有序性:tuple 中的元素按順序儲存,可以通過索引訪問
  • 不可變性:tuple 創建後無法修改其內容
  • 可嵌套:tuple 可以包含其他 tuple 或其他資料結構(如 list)
  • 可哈希(Hashable):由於不可變性,tuple 可以作為字典的鍵或集合的元素

 

tuple v.s. list:
tuple通常可以用來取代串列,但tuple的功能較少,沒有append()、insert()等等
為何不使用串列來取代所有的tuple?

  • tuple 不可變,list 可變
  • tuple佔用的空間較少
  • 不會不小心破壞tuple的項目(因為不可變)
  • 可以將tuple當成字典鍵
  • 可以將具名tuple當成物件的簡化替代品
  • 函式引數是以tuple的形式傳入的

創建 tuple

 

tuple 方法:
count()、index()

 

tuple 常用操作:

 

具名元組 (namedtuple)
namedtuple 是 Python 中 collections 模組提供的一個工廠函數,用於創建具有命名字段的輕量級元組子類,它結合了元組的不可變性和字典的可讀性,適合用來儲存簡單的資料結構

特點:

  • 不可變性:創建後,namedtuple 的字段無法修改
  • 命名字段:可以通過字段名稱來存取資料,提升程式碼的可讀性
  • 記憶體高效:與普通類別相比,namedtuple 佔用的記憶體更少

namedtuple 適合用來儲存簡單的不可變資料,兼具元組的高效性和字典的可讀性,常用於替代簡單的類別或字典,如果你需要一個輕量且不可變的資料結構,namedtuple 是一個很好的選擇

 

 

 

[Python] [list] 學習筆記

List 基本概念:
清單是Python中的一種有序、可變的集合資料類型,可以儲存不同類型的元素

1. 建立list

 

2. 存取 list 元素
使用索引(index)方式來存取,索引初始值為0,最大值為該 list長度 – 1
使用負數索引則是由 -1 開始至 -1 – 長度 + 1

 

3. 列表切片
切片操作是一種強大且靈活的功能,可以輕鬆地從列表中提取子列表或進行其他操作。
切片操作使用 [start:stop:step] 的語法

PS:
1. 切片操作不會修改原始列表,而是返回一個新的列表(除非你直接對切片賦值)。
2. 如果索引超出範圍,Python 不會報錯,而是會自動調整為有效範圍。
3. 切片操作的時間複雜度為 O(k),其中 k 是切片後的列表長度。

 

4. 修改列表 (增刪改)
append, insert, remove, pop, del

 

5. 列表操作
使用 + 運算子連接兩個清單
使用 * 運算子複製

 

6. 清單常用方法
count()、reverse()、copy()、len()、max()、min()、sort()

 

7. 列表推導式 (list comprehension)
是一種簡潔且強大的語法,用於快速創建列表。它允許你在一行代碼中生成新的列表,並且通常比使用 for 迴圈更簡潔和高效
PS: 需要額外紀錄介紹相關用法與範例

 

8. 嵌套列表
一個list內的元素也是list,在機器學習與矩陣運算下常使用到

 

9. 列表循環
使用 for 迴圈遍歷列表

 

10. in 與 not in
檢查元素是否存在