Python Note

型別 – 小分類 (Type) / 型態 – 大分類 (Data Type)

意思: 會將不同類型的元素、資料進行分類是因為,每種資料都有其獨特的特性、佔用的記憶體大小、以及可以對其執行的操作。

數字型態 (Numeric Types): 1,2,3,4,5,6,7……
布林型態 (Boolean Types):表示True或Flase的值。只有兩個可能的值。
字串型態 (String Types):由文字字元組成的序列。通常用引號(” “)包起來。
序列型態 (Sequence Types):有序的資料集合。
映射型態 (Mapping Types):鍵值對 (key-value pairs) 的無序集合。
集合型態 (Set Types):無序的、不重複的元素集合。

定義變數 (宣告型別): 是為了讓程式明確地知道「資料的種類」,從而正確分配記憶體、執行操作和檢查錯誤。
編碼 (文字編碼): 是為了讓電腦將人類可讀的文字轉換成「數字」,實現文字的儲存、處理和交換,並避免亂碼。

不同類型的資料即使內容相同,但會因為類型不同(記憶體位置不同)而不同,123 == “123” 的結果是 False

結合性 (Associativity):運算符的「執行方向」
只有當使用=時,會用右結合,其他的運算符號都是左結合
右結合 (Right-Associative): 從右到左執行。
x = y = z = 1
這意味著 z = 1 會先執行。
然後 y = (z = 1) 會執行。
最後 x = (y = (z = 1)) 會執行。
左結合 (Left-Associative): 從左到右執行。
範例:a – b – c 會被解析為 (a – b) – c

字串的[索引值]從0開始的原因是因為偏移值,第一個因為不用動所以才會是0

常見類型 (Type)

可迭代物件 Iterable 
代表可以逐一遍歷的物件,只要能夠使用for迴圈的都算。 

字串 String , str
有序,可用索引 str[0] 來取得元素
有不可變的特性,內容不能被修改,任何看似修改的操作,都會儲存在新的記憶體位置,並回傳新字串

元組 Tuple , tuple( )
有序,可用索引 tuple[0] 來取得元素
有不可變的特性,若要修改,需要先轉換成 list 再轉回 tuple

列表 List , list[ ]
有序,可用索引 list[0] 來取得元素
有可變特性,可隨時修改、新增、刪除內容

集合 Set , set( )
無序,不可用索引來取得元素
有可變特性,可隨時修改、新增、刪除內容
有元素唯一特性集合內不會有重複的元素

字典Dictionary , dict{ }
無序,不可用索引來取得元素(在python3.7+會保留插入順序)
有可變特性,可隨時修改、新增、刪除內容
有鍵-值對特性,以key-value形式來儲存
每個key都是唯一,若是有重複的key,後讀取key的value(後面的)會覆蓋前讀取的value

轉換函式

str.upper( ):回傳新字串,所有字母都轉換成大寫
str.lower( ):回傳新字串,所有字母都轉換成小寫
str.swapcase( ):回傳新字串,所有字母都大小寫互換
str.title( ):回傳新字串,所有第一個字母都會被轉換成大寫
str.capitalize( ):回傳新字串,除了第一個字母轉成大寫,其他都轉成小寫
str.replace(old,new):回傳新字串,用新的字母來取代舊的字母

str( )轉換字串、int( )轉換整數、float( )轉換浮點數
list( )轉換列表、tuple( )轉換元組、set( )轉換集合

判斷函式

str.isupper( ):檢查字串中所有字母是否為大寫。如果是,回傳 True;否則回傳 False
str.islower( ):檢查字串中所有字母是否為小寫。如果是,回傳 True;否則回傳 False
str.isalpha( ):檢查字串中是否都是字母
str.isdigit( ):檢查字串中是否都是數字
str.isidentifier( ):檢查字串內是否符合 Python 變數命名的規則
str.isalnum( ):檢查字串中是否都是字母和數字
str.isspace( ):檢查字串中是否都是空格
str.istitle( ):檢查字串中是否開頭為大寫
str.startwith(n):檢查開頭是否為 n 字串
str.endwith(n):檢查結尾是否為 n 字串
str.find(n,start,end):從左至右,找n字串第一次出現的索引,可設定範圍
str.rfind(n,start,end):從右至左,找n字串第一次出現的的索引,可設定範圍

str.count(sub, start=None, end=None) :用來計算子字串在字串中出現的次數
sub: 字串,start: (可選) 起始索引,end: (可選) 結束索引。

from collections import Counter 適用於大筆資料
my_list = [‘apple’, ‘banana’, ‘apple’, ‘orange’, ‘banana’, ‘apple’]
word_counts = Counter(my_list)
print(word_counts)
# 輸出: Counter({‘apple’: 3, ‘banana’: 2, ‘orange’: 1})

enumerate函式:在一個可迭代物件裡,同時回傳元素的「索引」和「值」。
my_list = [‘a’, ‘b’, ‘c’]
for index, value in enumerate(my_list):
print(f”索引: {index}, 值: {value}”)
# 索引: 0, 值: a
# 索引: 1, 值: b
# 索引: 2, 值: c

計算函式

(+,-,*,/,//,%,**):運算符

sum( ):計算一個可迭代物件(例如列表、元組)中所有元素的總和。
len( ):計算一個可迭代物件的長度(元素個數)。
max( ):計算一個可迭代物件的最大值
min( ):計算一個可迭代物件的最小值
round(x,2):x值取到後兩位小數點數
abs( ):將數值取絕對值

pow(x, y, mod=None):函式用來計算 x 的 y 次方,即 x **y
base:底數 x , exp:指數 y , mod:(可選) 模數

complex(real, imag):用實部 real 和虛部 imag 創建一個複數。
z1 = complex(3, 4) # 創建 3 + 4j
print(z1) # 輸出: (3+4j)

編輯、修改函式

str常用

str.replace(old,new):將字串中出現的所有 old,替換為 new,然後回傳一個新的字串。
str( ) + str( ):用運算符來連接兩字串
str.split(“”):將輸入的字串 (str) 物件,用指定分隔符號來判斷分隔並切成列表
str.sorted( ):將輸入的物件排序後,回傳一個新的列表,原始物件不變
str.strip(” “):移除字串開頭和結尾的空白字元或指定字元
” “.join(str):將物件內的所有字串元素,用指定分隔符號連接起來,並輸出成字串

list常用

list.sort( ):只能用於排序列表 (list)物件,會直接修改原始列表
list.append[ ]:在列表結尾加入單一元素
list.extend[a,b,c] & list + list (運算符):在列表結尾加入多個元素
list[1] = ‘new’:列表用索引賦值來直接修改元素
list[start:end] = [new]:使用切片,將範圍內的元素替換成一個新的序列,[new]長度可以與被替換的切片長度不同。
del list[start:end:]:移除列表切片範圍內的元素
list.remove(old_value):移除列表中的元素
list.insert(index, new_value):在列表中指定的索引值加入新元素
list.sorted( ):將輸入的列表排序後,回傳一個新的列表,原始物件不變
” “.join(list):將物件內的所有字串元素,用指定分隔符號連接起來,並輸出成字串

set常用

set.add( ):在集合內加入單一元素
set.update(a,b,c):在集合內加入多個元素
set.remove( ):移除集合內指定元素,若不存在會回報keyerror錯誤
set.discard( ):移除集合內指定元素,若不存在不會回報

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

A.union(B):| 的對應方法,回傳 A 和 B 的聯集
A.union(B) # 結果是 {1, 2, 3, 4, 5, 6}

A.intersection(B):& 的對應方法,回傳 A 和 B 的交集
A.intersection(B) # 結果是 {3, 4}

A.symmetric_difference(B):^ 的對應方法,回傳 A 和 B 的對稱差集
A.symmetric_difference(B) # 結果是 {1, 2, 5, 6}

A.difference(B):- 的對應方法,回傳 A 和 B 的差集
A.difference(B) # 結果是 {1, 2}

A.isdisjoint(B):判斷兩個集合是否不相交(即沒有任何共同元素)
A = {1, 2}
B = {3, 4}
A.isdisjoint(B) # 結果是 True
A = {1, 2}
B = {2, 3}
A.isdisjoint(B) # 結果是 False

A.issubset(B):判斷 A 是否為 B 的子集(即 A 的所有元素都在 B 中)
A = {1, 2}
B = {1, 2, 3}
A.issubset(B) # 結果是 True
A = {1, 4}
B = {1, 2, 3}
A.issubset(B) # 結果是 False

A.issuperset(B):判斷 A 是否為 B 的超集(即 B 的所有元素都在 A 中)
A = {1, 2, 3}
B = {1, 2}
A.issuperset(B) # 結果是 True

dict常用

dict.update(dict2):將dict2加入dict中
dict[‘key’] = ‘new’:列表用索引賦值來直接修改元素,若key不存在,會直接新增
del dict[key]:刪除指定key的value
dict.keys( ):取所有key,會顯示dict.keys,可轉成list、set、tuple來避免顯示
dict.values( ):取所有value,會顯示dict.values,可轉成list、set、tuple來避免顯示
dict.items( ):取所有key:value,會顯示dict.items,可轉成list、set、tuple來避免顯示
dict.get(key):取指定key的value

UTF-8 (Unicode Transformation Format – 8-bit)
UTF-8 是目前最通用、最主流的文字編碼標準。它是對 Unicode 編碼的實現方式。
它的核心思想是可變長度編碼:
英文字元,只用 1 個位元組來儲存,這與早期的 ASCII 碼完全兼容,非常節省空間。
非英文字元(例如中文、日文、韓文、表情符號),它會使用 2 到 4 個位元組來儲存。

Big5 (大五碼)
代表意義:
Big5 是一種用於繁體中文的文字編碼標準。

GBK (國標擴展)
代表意義:
GBK 是一種用於簡體中文的文字編碼標準,是中國國家標準(GB 2312)的擴展。

ASCII (American Standard Code for Information Interchange)
代表意義:
ASCII 是最基礎的編碼,只支援 128 個字元,包括英文字母、數字和基本符號。
UTF-8 的前 128 個編碼與 ASCII 完全相同,因此 UTF-8 兼容 ASCII。

chr():數字轉字元 (Character)
用途: chr(i) 函式會接收一個整數 i 作為參數,並回傳該整數所對應的Unicode 字元。
語法: chr(integer)
範圍: 傳入的整數必須在 0 到 1,114,111 之間,這是 Unicode 標準所定義的字元編碼範圍。
chr() 數字 -> 字元 整數 字串 (字元) 翻譯官「把數字編號念成字」

ord():字元轉數字 (Ordinal)
用途: ord(c) 函式會接收一個字元 c 作為參數,並回傳該字元所對應的整數編碼(在 Unicode 表中的位置)。
語法: ord(character)
範圍: 傳入的參數必須是長度為 1 的字串(也就是單個字元)。
ord() 字元 -> 數字 字串 (字元) 整數 翻譯官「把字翻譯成編號」

hex(x) 前綴: 0x
功能: 將一個整數 x 轉換為十六進制 (Hexadecimal) 字串。
oct(x) 前綴: 0o
功能: 將一個整數 x 轉換為八進制 (Octal) 字串。
bin(x) 前綴: 0b
功能: 將一個整數 x 轉換為二進制 (Binary) 字串。

num = 3.14
print = (“hello! %.2f ” %num)
print = (“hello {:5.2f} “.format(num))
print = (f”hello! {num:.2f}”)

import random
random.random( ):生成隨機浮點數
用途: 這是最基礎的隨機數生成函式,它會回傳一個介於 0.0 (包含) 到 1.0 (不包含) 之間的一個隨機浮點數

random.randint(a,b):生成隨機整數
用途: 回傳一個指定範圍內的隨機整數
a: 隨機數的下限(包含)
b: 隨機數的上限(包含)

random.choice( ):從序列中隨機選擇一個元素
用途: 從一個非空的序列(例如列表、元組、字串)中,隨機選擇一個元素並回傳。

random.randrange(start, stop, step):生成指定範圍內的隨機整數(類似 range)
用途: 回傳一個從 start 到 stop (不包含 stop) 之間,且可以指定步長 step 的隨機整數
start: (可選) 下限,預設為 0
stop: 上限(不包含)
step: (可選) 步長,預設為 1

random.shuffle( ):打亂序列
用途: 將一個可變序列(通常是列表)中的元素原地 (in-place) 隨機打亂順序
限制: shuffle 函式會直接修改原始列表,而且沒有回傳值,它只能用於可變序列(例如 list),不能用於不可變序列(例如 tuple 或 str)。

random.sample(sequence, k):從序列中隨機抽取多個不重複的元素
用途: 從一個序列中隨機選擇多個不重複的元素,並回傳一個新的列表。
sequence: 要抽取的序列。
k: 要抽取的元素個數。

map( function , Iterable ) :
能夠將 函式(function) 應用在一個 可迭代物件(Iterable) 的 “每個元素”

def square(x):
    return x * x
number = [1, 2, 3, 4]

num1 = list(map(square, num1))
print(num1) # 輸出: [1, 4, 9, 16]

num2 = list(map(lambda x: x * x, num) # 使用 lambda 函式在 map 中
print(num2) # 輸出: [1, 4, 9, 16]

num3 = [x * x for x in num] # 列表推導式
print(num3) # 輸出: [1, 4, 9, 16]

num4 = tuple(x * x for x in num) # 元組推導式
print(num4) # 輸出: (1, 4, 9, 16)

num5 = “”join(map(str , number)) # 搭配join來轉換成字串
print(num5) # 輸出: 1 2 3 4

number2 = [5,6,7,8]
# 傳入兩個列表,函式接收兩個參數,進行加法,x代表x+y,y代表下一個數
sum_list = list(map(lambda x, y: x + y, number, number2))
print(sum_list) # 輸出: [6,8,10,12]

list(map(str, num)) == [str(x) for x in num]
map有記憶體節省優點,for有可直接附加條件if的優點[str(x) for x in num if x>0]

cm = [175,160,185]
kg = [65,55,80]
bmi = [w/(h/100)**2 for h,w in zip(cm,kg)]
# 使用zip( )來讓cm跟kg的元素依序組成元組,直到沒有配對為止
bmi = [round(bmi1,1) for bmi1 in bmi] # 用round來取小數點後1位
print(bmi) # [21.2, 21.5, 23.4]

發佈留言