2022年8月22日 星期一

Python 學習筆記 : 數值處理函式

Python 在數值運算上除了在內建函式 (直接呼叫, 不須 import) 中提供基本的求次方, 絕對值, 總和, 餘數, 近似值等基本函式外, 還在標準函式庫 (不須安裝, 但須 import) 以 math 模組提供科學運算所需之函式 (例如三角函數, 指數, 對數等超越函數) 與常數. 以下測試內建數值相關函式. 

本篇測試參考了如下書籍 :
  1. Python 零基礎入門班 (碁峰 2018, 文淵閣工作室)
  2. Python 函式庫語法範例字典 (旗標 2019)
  3. Python 程式設計學習經典 (碁峰 2018)

Python 內建函式中與數值處理相關者如下表所示 : 


 內建數值相關函式 說明
 abs(x) 傳回 x 之絕對值
 min(a, b, c, ...) 或 min(list) 傳回多個參數或串列 list 最小的元素
 min(a, b, c, ...) 或 max(list) 傳回多個參數或串列 list 最大的元素
 sum(list [, x]) 計算串列 list 元素之總和 (傳入第二參數 x 外加)
 pow(x, y [, z]) 回傳回 x 的 y 次方 (若有傳入 z, 則為除以 z 後之餘數)
 divmod(x, y) 傳回 x/y 之商與餘數組成的 tuple, 即 (商, 餘數)
 round(x [, n]) 傳回 x 的小數點後 n 位之捨位近似值 (四捨五入或五捨六入)
 len(x) 傳回 x (串列, 元組, 字串, 字典, 集合) 的元素個數
 int(x) 將 x 轉成整數後傳回
 float(x) 將 x 轉成浮點數後傳回
 chr(x) 傳回 Unicode 編碼對應之字元, 例如 chr(65) 傳回 'A' 
 ord(x) 傳回字元 x 的 Unicode 編碼 (整數)
 bin(x) 將數值 x (8/10 進位) 轉成二進位字串 (例如 '0b101')
 oct(x) 將十進位值 x 轉成八進位後傳回
 hex(x) 將十進位值 x 轉成十六進位後傳回
 sorted(list) 將傳入串列 list 元素以升冪 (值由小到大) 排列後傳回 (原串列不變)
 str(x) 將參數 x (數值或布林值) 轉成字串型態
 slice([strat, ] stop [, step]) 傳回一個 slice 切片物件 (可傳入 list/tuple 等進行切片)


其中前半部比較明顯是純數學運算; 後半部則是與數值相關的資料型態轉換函式. 

min() 與 max() 可以傳入多個參數或 list/tuple, 傳回其中值最小或最大者, 參數或元素也可以是字串, 這時會以其 ASCII/Unicode 編碼值進行比較 (例如 'A' 是 42, 'B' 是 42). 注意, 參數或元素型態必須一致, 不可混雜, 例如 : 

>>> abs(-1.23)     
1.23    
>>> min(1, 2, 3, -6, 0)     
-6
>>> min([1, 2, 3, -6, 0])    
-6 
>>> max(1, 2, 3, -6, 0)    
3
>>> max([1, 2, 3, -6, 0])   
3
>>> min('A', 'B', 'C')        # 字串以 ASCII 編碼比較
'A'
>>> max('A', 'B', 'C')   
'C'
>>> min('我', '愛', '你')     # 字串以 Unicode 編碼比較
'你'
>>> sum([1, 2, 3, -6, 0])     # 必須是 tuple 或 list
0
>>> sum((1, 2, 3, -6, 0), 7)     # list 元素和外加 7
>>> pow(3, 4)                    # 3 的 4 次方=81
81
>>> pow(3, 4, 7)                 # 3 的 4 次方=81 再除以 7 之餘數
4
>>> divmod(11, 3)             # 11 除以 3 得商為 3, 餘數 2
(3, 2)
>>> round(4.14, 1)            # 四捨五入
4.1
>>> round(4.15, 1)            # 四捨五入
4.2

注意, round() 不一定四捨五入, 有時是五捨六入, 例如 :

>>> round(3.775, 2)   
3.77
>>> round(3.776, 2)    
3.78  

參考 :


len() 可用來計算字串中的字元數目, 元組, 串列, 字典, 集合內的元素或項目之個數, 例如 : 

>>> len('Hello')     
5
>>> len((1, 2, 3, 4, 5))   
5
>>> len([1, 2, 3, 4, 5])    
5
>>> len({'apple': '蘋果', 'banana': '香蕉'})   
2
>>> len({2, 1, 3})   

int() 可以將浮點數或布林值轉成整數, 浮點數會無條件捨去小數部分, True 會轉成 1, False 轉成 0, 也可以將整數字串轉成整數, 例如 :  

>>> int(1.234)       # 浮點數直接捨去小數部分
1
>>> int(-1.234)   
-1
>>> int('123')        # 整數字串轉整數
123
>>> int(True)   
1
>>> int(False)  
0

float() 會將傳入之整數轉成 float 型態, 更常用於將浮點數字串轉成 float 型態, 例如網路爬蟲從網頁中擷取到的數值其實是 str 型態, 進行運算前需先轉成 float 型態, 例如 : 

>>> float(123)    
123.0
>>> float('1.23')     
1.23
>>> float(True)    
1.0
>>> float(False)      
0.0

chr() 與 ord() 是兩個相反的函式, chr() 傳回 Unicode 相對的字元, 而 ord() 則是傳回字元之 Unicode, 例如 : 

>>> chr(65)   
'A'
>>> chr(66)   
'B'
>>> chr(67)    
'C'
>>> ord('A')   
65
>>> ord('B')    
66
>>> ord('C')   
67
>>> ord('我')   
25105
>>> ord('愛')   
24859
>>> ord('你')   
20320

bin(), oct(), 與 hex() 函式用在二進位, 八進位, 十六進位, 與十進位之間的轉換, bin() 會將傳入的 8/10/16 進位整數轉成 2 進位字串 (以 '0b' 開頭), 例如 : 

>>> bin(10)  
'0b1010'
>>> bin(0o7)    
'0b111'
>>> bin(0xF)    
'0b1111'
 
oct() 會將傳入的 2/10/16 進位數值轉成 8 進位字串 (以 '0o' 開頭), 例如 : 

>>> oct(15)   
'0o17'
>>> oct(0b1111)     
'0o17'
>>> oct(0xF)    
'0o17'

hex() 會將傳入的 2/8/10 進位數值轉成 16 進位字串 (以 '0x' 開頭), 例如 : 

>>> hex(15)   
'0xf'
>>> hex(0b1111)    
'0xf'
>>> hex(0o17)    
'0xf'

sorted() 可以將序列資料由小到大排序 (升冪), 若傳入第二參數 reverse=True 則會由大到小排序 (升冪), 若元素為字串, 則以其 ASCII/Unicode 依序比大小, 例如 : 

>>> sorted([4, 2, 3, 7, 1, 9])    
[1, 2, 3, 4, 7, 9]
>>> sorted([4, 2, 3, 7, 1, 9], reverse=True)    
[9, 7, 4, 3, 2, 1]
>>> sorted(['F', 'C','D', 'B', 'A', 'E'])    
['A', 'B', 'C', 'D', 'E', 'F']
>>> sorted(['F', 'C','D', 'B', 'A', 'E'], reverse=True)       
['F', 'E', 'D', 'C', 'B', 'A']

str() 函式可將傳入參數 (布林值, 數值) 轉成字串, 這在用 + 進行字串串接時會用到, 因為 Python 是強型別語言, 數值與字串不能直接串接, 必須將數值強制轉型為字串才能串接, 例如 :

>>> print('現在溫度攝氏 ' + str(42.5))    
現在溫度攝氏 42.5


參考 : 


沒有留言:

張貼留言