Python資料型別詳解02

RunTitan發表於2018-04-17

一. Number(數字)

  • Python 中數學運算常用的函式基本都在 math 模組、cmath 模組中。
  • math 模組提供了許多對浮點數的數學運算函式。
  • cmath 模組包含了一些用於複數運算的函式。
  • cmath 模組的函式跟 math 模組函式基本一致,區別是 cmath 模組運算的是複數,math 模組運算的是數學運算。
  • 要使用 mathcmath 函式必須先匯入:
import math

# 或者
import cmath
複製程式碼

1. Python數學常量

math模組中定義了三個數學常量

# 自然常數 e
e = 2.718281828459045
# 圓周率,一般以π來表示
pi = 3.141592653589793
# 2π
tau = 6.283185307179586
複製程式碼

2. Python三角函式

要直接訪問的,需要匯入 math 模組, 然後通過 math 靜態物件呼叫方法

函式 描述
acos(x) 返回x的反餘弦弧度值。
asin(x) 返回x的反正弦弧度值。
atan(x) 返回x的反正切弧度值。
atan2(y, x) 返回給定的 X 及 Y 座標值的反正切值。
cos(x) 返回x的弧度的餘弦值。
hypot(x, y) 返回歐幾里德範數 sqrt(x*x + y*y)
sin(x) 返回的x弧度的正弦值。
tan(x) 返回x弧度的正切值。
degrees(x) 將弧度轉換為角度,如degrees(math.pi/2) , 返回90.0
radians(x) 將角度轉換為弧度

3.Python數學函式

函式 返回值 ( 描述 )
abs(x) 返回數字的絕對值,如abs(-12) 返回 12
ceil(x) 返回數字的上入整數(小數向上取整),如math.ceil(4.1) 返回 5, math.ceil(4.0) 返回 4
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1; (Python在3.x中已經棄用)
exp(x) 返回e的x次冪, 如math.exp(2) 返回7.38905609893065
fabs(x) 返回數字的絕對值,如math.fabs(-10) 返回10.0
floor(x) 返回數字的下舍整數(小數向下取整),如math.floor(4.9)返回 4
log(x) math.log(math.e)返回1.0, math.log(100,10)返回2.0
log10(x) 返回以10為基數的x的對數,如math.log10(100)返回 2.0
max(x1, x2,...) 返回給定引數的最大值,引數可以為序列。
min(x1, x2,...) 返回給定引數的最小值,引數可以為序列。
modf(x) 返回x的整數部分與小數部分(元組形式),兩部分的數值符號與x相同,整數部分以浮點型表示; 如:math.modf(99.09), 返回(0.09000000000000341, 99.0)
pow(x, y) x**y 運算後的值。
round(x [,n]) 返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數; 如round(90.09, 1)輸出:90.1; 如:round(90.09)輸出:90
sqrt(x) 返回數字x的平方根, 如:math.sqrt(4)返回 2.0
  • 其中abs()fabs() 區別
    • abs()是一個內建函式,而fabs()math模組中定義的。
    • fabs()函式只適用於floatinteger型別,而abs() 也適用於複數

4. Python隨機數函式

  • 隨機數可以用於數學,遊戲,安全等領域中,還經常被嵌入到演算法中,用以提高演算法效率,並提高程式的安全性。
  • 隨機數函式需要匯入 random 模組,然後通過 random 靜態物件呼叫函式方法
  • Python包含以下常用隨機數函式:

4-1. choice

從序列(元組, 列表, 字串)的元素中隨機挑選一個元素

import random

random.choice( seq  )

# 測試用例
# 從序列的元素中隨機挑選一個元素
print(random.choice((1, 3, 5, 2)))
print(random.choice([1, 2, 3, 4]))
# 隨機返回一個字元
print(random.choice("titanjun"))
複製程式碼

4-2. randrange

返回指定遞增基數集合中的一個隨機數,預設基數預設值為1, 預設型別為int

randrange(self, start, stop=None, step=1, _int=int)
複製程式碼
  • 引數
    • start -- 指定範圍內的開始值,包含在範圍內。
    • stop -- 指定範圍內的結束值,不包含在範圍內。
    • step -- 指定遞增基數
# 輸出 100 <= number < 1000 間的隨機偶數
print(random.randrange(100, 1000, 2))
複製程式碼

4-3. random

隨機生成的一個實數,它在[0,1)範圍內

print(random.random())
複製程式碼

4-4. seed

該函式沒有返回值, 改變隨機數生成器的種子, 可生成同一個隨機數

random.seed(5)
print(random.random())
random.seed()
print(random.random())
複製程式碼

4-5. shuffle

  • 將列表的所有元素隨機排序, 沒有返回值
  • 因元組不支援二次賦值, 所以元組不支援重新排列
# 將序列的所有元素隨機排序
list1 = [1, 2, 3, 4]
random.shuffle(list1)
print(list1)
複製程式碼

4-6. uniform

  • 隨機生成一個在[x, y)範圍內的實數
  • 引數:
    • x -- 隨機數的最小值,包含該值。
    • y -- 隨機數的最大值,不包含該值。
print(random.uniform(2, 5))
複製程式碼

二. 字串

上一篇文章Python資料型別詳解01介紹了字串的一些基礎知識, 這裡就主要介紹字元創中常用的函式和語法

1. innot in

判斷字串是否包含指定字串

# 判斷字串中是否包含某字串
str = 'Hello Python'

if ('llo' in str):
    str += ' True'
else:
    str += ' False'
print(str)

# 判斷字串是否不包含某字串
if ('py' not in str):
    str += ' not in'
else:
    str += ' in'
print(str)

// 分別輸出
Hello Python True
Hello Python True not in
複製程式碼

2. 字串格式化

把其他型別的資料格式化為字串形式返回, 字串和其他型別之間要有%分開

符號 描述
%c 格式化字元及其ASCII碼
%s 格式化字串
%d 格式化整數
%u 格式化無符號整型
%o 格式化無符號八進位制數
%x 格式化無符號十六進位制數
%X 格式化無符號十六進位制數(大寫)
%f 格式化浮點數字,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 作用同%e,用科學計數法格式化浮點數
%g %f和%e的簡寫
%G %f 和 %E 的簡寫
%p 用十六進位制數格式化變數的地址

使用方式

print('che is %d' % 19)

// 跟C語言的寫法
prin他("che is %d", 19)
複製程式碼

3. str.format()函式

  • Python2.6 開始,新增了一種格式化字串的函式 str.format(),它增強了字串格式化的功能。 基本語法是通過 {}: 來代替以前的 %
  • format 函式可以接受不限個引數,位置可以不按順序。

簡單使用

# format函式
# 不設定指定位置,按預設順序
str1 = '{} {}'.format('hello', 'python')
print(str1)
# 設定指定位置
str2 = '{0}{1}'.format('Python', '字串')
print(str2)
# 設定指定位置
str3 = '{1} {0} {1}'.format('hello', 'che')
print(str3)

# 設定引數
print("姓名: {name}, 年齡: {age}".format(name='che', age=18))
# 設定字典引數
dic = {'name': 'jun', 'age': 20}
print("姓名: {name}, 年齡: {age}".format(**dic))
# 設定列表引數
list0 = ['titan', 20]
print("姓名: {0[0]}, 年齡: {0[1]}".format(list0))

/*輸出結果
hello python
Python字串
che hello che
姓名: che, 年齡: 18
姓名: jun, 年齡: 20
姓名: titan, 年齡: 20
*/
複製程式碼

4. 格式化操作符輔助指令

相關操作符具體的使用後面再說

符號 功能
* 定義寬度或者小數點精度
- 在負數前面顯示加號( - )
+ 在正數前面顯示加號( + )
# 在八進位制數前面顯示零('0'),在十六進位制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X')
0 顯示的數字前面填充'0'而不是預設的空格
% %%輸出一個單一的'%'
m.n. m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)
: 後面帶填充的字元,只能是一個字元,不指定則預設是用空格填充
{{}} 轉義大括號, 類似%的輸出

5. 數字格式化操作符

數字 格式 輸出 描述
3.1415926 {:.2f} 3.14 保留小數點後兩位
3.1415926 {:+.2f} +3.14 帶符號保留小數點後兩位
-1 {:+.2f} -1.00 帶符號保留小數點後兩位
2.71828 {:.0f} 3 不帶小數
5 {:0>2d} 05 數字補零 (填充左邊, 寬度為2)
5 {:x<4d} 5xxx 數字補x (填充右邊, 寬度為4)
10 {:x<4d} 10xx 數字補x (填充右邊, 寬度為4)
1000000 {:,} 1,000,000 以逗號分隔的數字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00e+09 指數記法
13 {:10d} 13 右對齊 (預設, 寬度為10)
13 {:<10d} 13 左對齊 (寬度為10)
13 {:^10d} 13 中間對齊 (寬度為10)

進位制轉換(以十進位制數字11為例)

進位制 格式 輸出
二進位制 '{:b}'.format(11) 1011
十進位制 '{:d}'.format(11) 11
八進位制 '{:o}'.format(11) 13
十六進位制 '{:x}'.format(11) b
小寫十六進位制 '{:#x}'.format(11) 0xb
大寫十六進位制 '{:#X}'.format(11) 0XB
print('百分比: %d%%' % 23)
print('{}索引值: {{0}}'.format('jun'))
print('{:#x}'.format(9))
print('{:#X}'.format(9))

/*輸出結果: 
百分比: 23%
jun索引值: {0}
0x9
0X9
*/
複製程式碼

6.字串的內建函式

下列方法實現了string模組的大部分方法,如下表所示列出了目前字串內建支援的方法,所有的方法都包含了對Unicode的支援,有一些甚至是專門用於Unicode

方法 返回結果 描述
'titan'.capitalize() Titan 把字串的第一個字元大寫
'hello\tpython'.expandtabs() hello python 把字串 string 中的 tab 符號轉為空格,tab 符號預設的空格數是 8
str5.find('irl') 11 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1
str5.rfind('irl') 11 同find方法, 從右向左查詢
str5.index('gi') 10 跟find()方法一樣,只不過如果str不在 string中會報一個異常.
str5.rindex('gi') 10 同index方法, 從右向左查詢
'jun0929'.isalnum() True 至少有一個字元並且所有字元都是字母或數字則返回 True,否則返回 False
'titan'.isalpha() True 至少有一個字元並且所有字元都是字母則返回 True,否則返回 False
u'23e'.isdecimal() False 字串只包含十進位制字元返回True,否則返回False(只針對unicode物件)
"123456".isdigit() True 字串只包含數字則返回 True 否則返回 False
'23e'.islower() True 字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False
u"23443434"isnumeric() True 字串中只包含數字字元,則返回 True,否則返回 False(只針對unicode物件)
" ".isspace() True 字串中只包含空格,則返回 True,否則返回 False.
'JING'.isupper() True 字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True,否則返回 False
'-'.join( ['a', 's', 'd'] ) a-s-d 用於將序列中的元素以指定的字元連線生成一個新的字串
'THIS'.lower this 返回將字串中所有大寫字元轉換為小寫後生成的字串
"88this".lstrip('8') this 返回截掉字串左邊的空格或指定字元後生成的新字串
'this88'.rstrip('8') this 返回截掉字串右邊的空格或指定字元後生成的新字串
max('python') z 返回字串中最大的字母
min('python') h 返回字串中最小的字母
'https://www.titanjun.top'.partition('://') ('https', '://', 'www.titanjun.top') 返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串
'this'.startswith('th', 1, 4) False 檢查字串在制定範圍內是否是以指定子字串開頭
"0jun0".strip('0') jun 返回移除字串頭尾指定的字元生成的新字串
'Python'.swapcase() pYTHON 返回大小寫字母轉換後生成的新字串
'hello python'.title() Hello Python 返回所有單詞都是以大寫開始
'jun'.upper() JUN 返回小寫字母轉為大寫字母的字串

除了以上方法外還有下列重要方法

6-1. count()方法

返回子字串在字串中出現的次數

str.count(sub, start= 0,end=len(string))

//使用
print('hello world'.count('l', 1, 8))
print('hello world'.count('l'))

//輸出: 
2
3
複製程式碼
  • 引數
    • sub -- 搜尋的子字串
    • start -- 字串開始搜尋的位置。預設為第一個字元,第一個字元索引值為0。
    • end -- 字串中結束搜尋的位置。字元中第一個字元的索引為 0。預設為字串的最後一個位置。

6-2. center()方法

返回一個原字串居中,並使用空格填充至長度 width 的新字串。預設填充字元為空格

str.center(width, fillchar)

//使用
>>> str = 'titan'
>>> str.center(8, '-')
'--titan---'
>>> str.center(9)
'   titan   '
>>>
複製程式碼
  • 不提供 fillchar 引數則預設為空格
  • width 引數小於等於原字串的長度時,原樣返回
  • 無法使左右字元數相等時候,左側字元會比右側少 1

6-3. encode()方法

以 encoding 指定的編碼格式編碼字串。errors引數可以指定不同的錯誤處理方案

str.encode(encoding='UTF-8',errors='strict')

//示例
'titan'.encode('UTF-8','strict')

//輸出: b'titan'
複製程式碼
  • encoding -- 要使用的編碼,如"UTF-8"。
  • errors -- 設定不同錯誤的處理方案。預設為 strict,意為編碼錯誤引起一個UnicodeError。 其他可能得值有 ignore, replace, xmlcharrefreplace, backslashreplace 以及通過 codecs.register_error() 註冊的任何值。

6-4. endswith()方法

用於判斷字串是否以指定字尾結尾,如果以指定字尾結尾返回True,否則返回False

str.endswith(suffix[, start[, end]])

//使用示例
str5 = 'her is my girl friend haha!!'
print(str5.endswith('!!'))
print(str5.endswith('ha', 0, len(str5) - 2))

//輸出結果: 都是True
複製程式碼
  • suffix -- 該引數可以是一個字串或者是一個元素
  • start -- 字串中的開始位置, 可不傳
  • end -- 字元中結束位置, 可不傳

6-5. ljust() 和 rjust()方法

  • ljust(): 返回一個原字串左對齊,並使用空格填充至指定長度的新字串。如果指定的長度小於原字串的長度則返回原字串
  • rjust(): 返回一個原字串右對齊
  • 引數
    • width -- 指定字串長度。
    • fillchar -- 填充字元,預設為空格
str.ljust(width[, fillchar])
str.rjust(width[, fillchar])

//測試用例
str = "this is string example....wow!!!";
print str.ljust(50, '0');
print str.rjust(50, '0');

//輸出:
this is string example....wow!!!000000000000000000
000000000000000000this is string example....wow!!!
複製程式碼

6-6. replace()方法

返回字串中的 old(舊字串) 替換成 new(新字串)後生成的新字串,如果指定第三個引數max,則替換不超過 max 次

str.replace(old, new[, max])

//測試
str = 'Python is a good language!'
print(str7.replace('o', 'i', 2))

//輸出: 
Pythin is a giod language!
複製程式碼

6-7. split()方法

通過指定分隔符對字串進行切片,如果引數 num 有指定值,則僅分隔 num 個子字串

str.split(str="", num=string.count(str))

//測試
str7 = 'Python is a good language!'
print(str7.split(' '))
print(str7.split(' ', 3))

//輸出:
['Python', 'is', 'a', 'good', 'language!']
['Python', 'is', 'a', 'good language!']
複製程式碼

6-8. splitlines()方法

按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果引數 keepends 為 False,不包含換行符,如果為 True,則保留換行符

str.splitlines([keepends])

//測試
str8 = 'ab c\n\nde fg\rkl\r\n'
print(str8.splitlines())

str9 = 'ab c\n\nde fg\rkl\r\n'
print(str9.splitlines(True))

//輸出:
['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
複製程式碼
  • 對於Python語言, 我也正在努力學習中, 文中如有不足之處, 還望多多指教
  • 測試程式碼詳見 GitHub地址
  • 後期會持續更新相關文章, 未完待續...

相關文章