Python數據類型詳解02

一. Number(數字)

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

# 或者
import cmath
複製代碼

1. Python數學常量

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

# 天然常數 e
e = 2.718281828459045
# 圓周率,通常以π來表示
pi = 3.141592653589793
# 2π
tau = 6.283185307179586
複製代碼

2. Python三角函數

要直接訪問的,須要導入 math 模塊, 而後經過 math 靜態對象調用方法git

函數 描述
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

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

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)範圍內api

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介紹了字符串的一些基礎知識, 這裏就主要介紹字符創中經常使用的函數和語法dom

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地址
  • 後期會持續更新相關文章, 未完待續...
相關文章
相關標籤/搜索