這篇文章介紹了Python中的基本數(shù)據(jù)類型,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
一、數(shù)據(jù)類型分類
1、按存值個(gè)數(shù)區(qū)分
- 單個(gè)值:數(shù)字,字符串
- 多個(gè)值(容器):列表,元組,字典,集合
2、按可變不可變區(qū)分
- 可變:列表[],字典{},集合{}
- 不可變:數(shù)字,字符串,元組()、bool,None
3、有序無(wú)序區(qū)分
- 有序(可按索引取值):字符串,列表,元組
- 無(wú)序:字典,集合
二、整型(int)
1 2 3 4 | age = 18? # age=int(18)print(id(age))#<code>4530100848</code>print(type(age))#<class 'int'>print(age)#18 |
1、四種進(jìn)制表示形式
- 十進(jìn)制:1010, 99, -217
- 二進(jìn)制,以0b或0B開頭:0b010, -0B101
- 八進(jìn)制,以0o或0O開頭:0o123, -0O456
- 十六進(jìn)制,以0x或0X開頭:0x9a, –0X89
我們可以使用二進(jìn)制、十六進(jìn)制和八進(jìn)制來(lái)代表整數(shù)文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
1 2 3 4 5 6 7 8 9 10 11 | number = 0b101011 # 二進(jìn)制print(number)# 43number = 0xA0F # 十六進(jìn)制print(number)# 2575number = 0o37? # 八進(jìn)制print(number)# 31 |
2、int()方法
可將純數(shù)字的字符串轉(zhuǎn)為十進(jìn)制的整型文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
int(x):將x變成整數(shù),舍棄小數(shù)部分。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
1 2 3 4 5 | print(int("123"))? # 123x = int('111')print(type(x))? # <class 'int'># print( int('11.1') ) # 報(bào)錯(cuò)print(int(123.45))? # 123 |
3、type和isinstance
內(nèi)置的type()函數(shù)可以用來(lái)查詢變量所指的對(duì)象類型。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
1 2 3 | a, b, c, d = 20, 5.5, True, 4 + 3jprint(type(a), type(b), type(c), type(d))# <class 'int'> <class 'float'> <class 'bool'> <class 'complex'> |
此外還可以用isinstance來(lái)判斷:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
1 2 3 | a = 111isinstance(a, int)# True |
type和isinstance的區(qū)別在于:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
- type()不會(huì)認(rèn)為子類是一種父類類型。
- isinstance()會(huì)認(rèn)為子類是一種父類類型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class A:????passclass B(A):????passisinstance(A(), A)# Truetype(A()) == A# Trueisinstance(B(), A)# Truetype(B()) == A# False |
4、對(duì)象的創(chuàng)建和刪除
當(dāng)你指定一個(gè)值時(shí),Number對(duì)象就會(huì)被創(chuàng)建:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
1 2 3 | var = 2var_a =var_b = 10 |
您可以通過(guò)使用del語(yǔ)句刪除單個(gè)或多個(gè)對(duì)象。文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
del語(yǔ)句的語(yǔ)法是:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/40023.html
del var1[, var2[, var3[...., varN]]]
例如:
1 2 3 | del vardel var_a, var_bprint(var) # name 'var' is not defined |
4、在交互模式中,最后被輸出的表達(dá)式結(jié)果被賦值給變量 _
例如:
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price +?_
113.0625
>>> round(_, 2)
113.06
此處, _ 變量應(yīng)被用戶視為只讀變量。
5、注意:
- Python可以同時(shí)為多個(gè)變量賦值,如a, b = 1, 2。
- 一個(gè)變量可以通過(guò)賦值指向不同類型的對(duì)象。
- 數(shù)值的除法包含兩個(gè)運(yùn)算符:/ 返回一個(gè)浮點(diǎn)數(shù),// 返回一個(gè)整數(shù)。
- Python 可以使用 ** 操作來(lái)進(jìn)行冪運(yùn)算:5 ** 2 表示 5 的平方
- 在混合計(jì)算時(shí),Python會(huì)把整型轉(zhuǎn)換成為浮點(diǎn)數(shù)。
注意第3點(diǎn):// 得到的并不一定是整數(shù)類型的數(shù),它與分母分子的數(shù)據(jù)類型有關(guān)系。
1 2 3 4 5 6 | print(7 // 2)# 3print(7.0 // 2)# 3.0print(7 // 2.0)# 3.0 |
三、浮點(diǎn)型(float)
1 2 3 4 5 | salary = 2.1? # salary=float(2.1)print(id(salary))#<code>4569240656 </code>print(type(salary))#<code><class 'float'> </code>print(salary)# <code>2.1 |
1、float()方法
將純數(shù)字的字符串轉(zhuǎn)為浮點(diǎn)型數(shù)字。
float(x):將x變成浮點(diǎn)數(shù),增加小數(shù)部分。
1 2 3 4 5 6 7 8 9 10 11 | print(float("1.23"))? # 1.23x = float('111')print(x)? # 111.0print(type(x))? # <class 'float'>x = float('11.1') print(x)? # 11.1print(type(x))? # <class 'float'>print(float(12))? # 12.0; |
2、round()函數(shù)
1.浮點(diǎn)數(shù)間運(yùn)算存在不確定尾數(shù),一般發(fā)生在10的16次冪左右
2.round(x, d)函數(shù):對(duì)x四舍五入,d是小數(shù)截取位數(shù)
3.浮點(diǎn)數(shù)間運(yùn)算及比較,用round()函數(shù)輔助
1 | 0.1 + 0.2 == 0.3? # False |
round(0.1+0.2, 1) == 0.3?#?True
3、科學(xué)計(jì)數(shù)法
- 使用字母e或E作為冪的符號(hào),以10為基數(shù),
格式如下:<a>e<b>,表示?a*10b - 例如:
4.3e-3?值為0.0043,9.6E5?值為?960000.0
4、數(shù)字運(yùn)算函數(shù)
abs(x):絕對(duì)值。x的絕對(duì)值。
1 | print(abs(-10.01))? # 10.01 |
divmod(x,y):商余。(x//y, x%y),同時(shí)輸出商和余數(shù)。
1 | print(divmod(10, 3))? # (3, 1) |
pow(x, y[, z]):冪余。(x**y)%z,[..]表示參數(shù)z可省略。
1 2 3 4 | print(pow(3, 2))? # 9print(pow(3, 2, 2))? # 1print(pow(3, pow(3, 2)))? # 19683print(pow(3, pow(3, 2), 10000))? # 9683 |
round(x[, d]):四舍五入。d是保留小數(shù)位數(shù),默認(rèn)值為0。
1 | print(round(-10.123, 2))? # -10.12 |
max(x1,x2,?,xn):最大值。返回x1,x2,?,xnx1,x2,?,xn中的最大值,n不限。
1 | print(max(1, 9, 5, 4, 3))? # 9 |
min(x1,x2,?,xn):最小值。返回x1,x2,?,xnx1,x2,?,xn中的最小值,n不限。
1 | print(min(1, 9, 5, 4, 3))? # 1 |
以下為數(shù)學(xué)函數(shù),需要導(dǎo)入math模塊
exp(x):返回e的x次冪(ex)
1 2 | import mathprint(math.exp(1))? # 2.718281828459045 |
fabs(x):返回?cái)?shù)字的絕對(duì)值
1 2 | import mathprint(math.fabs(-10))? # 10.0 |
ceil(x):返回?cái)?shù)字的上入整數(shù)
1 2 | import mathprint(math.ceil(4.1))? # 5 |
floor(x): 返回?cái)?shù)字的下舍整數(shù)
1 2 | import mathprint(math.floor(4.9))? # 4 |
log(x):返回以e為基數(shù)的對(duì)象
1 2 3 4 | import mathprint(math.log(math.e))? # 1.0print(math.log(100, 10))? # 2.0 |
log10(x): 返回以10為基數(shù)的x的對(duì)數(shù)
1 2 3 | import mathprint(math.log10(100))? # 2.0 |
modf(x):返回x的整數(shù)部分與小數(shù)部分,兩部分的數(shù)值符號(hào)與x相同,整數(shù)部分以浮點(diǎn)型表示。
1 2 | import mathprint(math.modf(-100.1))? # (-0.09999999999999432, -100.0) |
sqrt(x):返回?cái)?shù)字x的平方根。
1 2 | import mathprint(math.sqrt(81))? # 9.0 |
四、復(fù)數(shù)型(complex)
a+bj?被稱為復(fù)數(shù),其中,a是實(shí)部,b是虛部
- real 獲得實(shí)部
- imag 獲得虛部
1 2 3 | z = 1.23e-4 + 5.6e+89jprint(z.real)? # 0.000123print(z.imag)? # 5.6e+89 |
1、complex(x):將x變成復(fù)數(shù)
- complex(x) 將x轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為 x,虛數(shù)部分為 0。
- complex(x, y) 將 x 和 y 轉(zhuǎn)換到一個(gè)復(fù)數(shù),實(shí)數(shù)部分為 x,虛數(shù)部分為 y。x 和 y 是數(shù)字表達(dá)式。
1 | print(complex(4))? # (4+0j) |
五、布爾型(Bool)
True、False通常情況不會(huì)直接引用,需要使用邏輯運(yùn)算得到結(jié)果。
1 2 | print(type(True))# <code><class 'bool'></code>print(True)# True |
注意:Python中所有數(shù)據(jù)類型的值自帶布爾值。
如此多的數(shù)據(jù)類型中只需要記住只有0、None、空、False的布爾值為False,其余的為True。
1 2 3 4 5 6 7 8 | print(bool(0))? # Falseprint(bool(None))? # Falseprint(bool(''))? # Falseprint(bool(False))? # Falseprint(bool('nick'))? # Trueprint(bool(1 > 2))? # Falseprint(bool(1 == 1))? # True |
六、字符串(str)
字符串就是一串被串起來(lái)的字符,在單引號(hào)、雙引號(hào)或三引號(hào)內(nèi)包裹的一串字符。同時(shí)使用反斜杠 \ 轉(zhuǎn)義特殊字符。
1 2 3 4 5 | name1 = 'nick'name2 = "egon"print(id(name1)) # <code>4418849624</code>print(type(name1))# <class 'str'>print(name1)# nick |
需要注意的是:三引號(hào)內(nèi)的字符可以換行,而單雙引號(hào)內(nèi)的字符不可以。
1 | name3 = """nick |
egon"""
1 | print(name3) |
1 2 | nickegon |
1、特殊字符串:
- u'unicode': unicode編碼的字符串
- b'101': 二進(jìn)制編碼的字符串
轉(zhuǎn)義符:
Python 使用反斜杠(\)轉(zhuǎn)義特殊字符。
1 | print("這里有個(gè)雙引號(hào)(\")")? # 這里有個(gè)雙引號(hào)(") |
轉(zhuǎn)義符形成一些組合,表達(dá)一些不可打印的含義:
\(在行尾時(shí)) :續(xù)行符
\\ :反斜杠符號(hào)
\' :?jiǎn)我?hào)
\" :雙引號(hào)
\a :響鈴
\b :退格(Backspace)
\000 :空
\n :換行
\v :縱向制表符
\t :橫向制表符
\r :回車(光標(biāo)移動(dòng)到本行首)
\f :換頁(yè)
\oyy :八進(jìn)制數(shù),yy 代表的字符,例如:\o12 代表?yè)Q行,其中 o 是字母,不是數(shù)字 0。
\xyy :十六進(jìn)制數(shù),yy代表的字符,例如:\x0a代表?yè)Q行
\other :其它的字符以普通格式輸出
- r'\n': 原生字符串,也就是說(shuō)'\n'這是普通的兩個(gè)字符,并沒(méi)有換行的意思。
Python 使用反斜杠(\)轉(zhuǎn)義特殊字符,如果你不想讓反斜杠發(fā)生轉(zhuǎn)義,可以在字符串前面添加一個(gè) r,表示原始字符串:
1 2 3 4 5 6 | print('Ru\noob')# Ru# oobprint(r'Ru\noob')# Ru\noob |
注意:
- Python?沒(méi)有單獨(dú)的字符類型,一個(gè)字符就是長(zhǎng)度為1的字符串。
- 反斜杠(\)可以作為續(xù)行符,表示下一行是上一行的延續(xù)。
- Python中的字符串有兩種索引方式,從左往右以0開始,從右往左以-1開始。
- Python中的字符串不能改變,向一個(gè)索引位置賦值,比如word[0] = 'm'會(huì)導(dǎo)致錯(cuò)誤。
2、字符串連接:x+y
連接兩個(gè)字符串x和y。如果字符串內(nèi)有引號(hào),則包裹字符串的引號(hào)和字符串內(nèi)部的引號(hào)不能相同。
1 2 3 4 | msg2 = "my name is 'nick'"msg3 = 'my name is "nick"'print(msg2 + msg3)? # my name is 'nick'my name is "nick" |
3、字符串重復(fù):x * n
只能乘以數(shù)字。
1 2 | name = 'nick 'print(name * 10)# <code>nick nick nick nick nick nick nick nick nick nick |
4、字符串比較大小:x>y
按照ASCII碼比較.字符串的比較是字母的順序。
1 2 3 4 5 | msg1 = 'hello'msg2 = 'z'print(msg1 > msg2) #Falseprint('Z' > 'A') #Trueprint('Z' > 'a') #False |
5、可以使用str()、hex()、chr()、ord()方法轉(zhuǎn)為特殊字符串。
str(x):任意類型x所對(duì)應(yīng)的字符串形式
1 2 | print(str(1.23))? # “1.23”print(str([1, 2]))? # “[1, 2]” |
hex(x)?或?oct(x):整數(shù)x的十六進(jìn)制或八進(jìn)制小寫形式字符串:
1 2 | print(hex(425))? # "0x1a9"print(oct(425))? # "0o651" |
chr(u):x為Unicode編碼,返回其對(duì)應(yīng)的字符
ord(x):x為字符,返回其對(duì)應(yīng)的Unicode編碼
1 2 | print(chr(21704))? # "哈"print(ord('哈'))? # "21704" |
6、常用函數(shù):
1、str[n]:按索引取值
1 2 3 4 | msg = 'hello nick'#????? 0123456789? # 索引序號(hào)print(msg[6] ) #索引為6: nprint(msg[-3]) # 索引為-3: i |
你可以截取字符串的一部分并與其他字段拼接,如下實(shí)例:
1 2 | var1 = 'Hello World!'print("已更新字符串 : ", var1[:6] + 'Runoob!')? # 已更新字符串 :? Hello Runoob! |
舉例:輸入整數(shù)對(duì)應(yīng)的星期字符串
1 2 3 | weekStr = "一二三四五六日"weekId = eval(input("請(qǐng)輸入星期數(shù)字(1-7):"))print("星期" + weekStr[weekId - 1])? # 7? 星期日 |
2、str[x:y:step]:切片(顧頭不顧尾,步長(zhǎng)) :
遵循左閉右開原則,str[0,2] 是不包含第 3 個(gè)字符的。
1 2 3 4 5 6 7 8 9 10 11 12 | msg = 'hello_nick'#????? 0123456789? # 索引序號(hào)print(msg[3:] )? # 切片3-最后: lo_nickprint(msg[3:8])? # 切片3-8: lo_niprint(msg[3:8:2] )? # 切片3-8,步長(zhǎng)為2: l_iprint(msg[3::2])? # 切片3-最后,步長(zhǎng)為2: l_ik# 了解,步長(zhǎng)為正,從左到右;步長(zhǎng)為負(fù),從右到左print(msg[:])? # 切片所有: hello_nickprint(msg[::-1] )? # 反轉(zhuǎn)所有: kcin_ollehprint(msg[-5:-2:1] )? # 切片-5--2: _niprint(msg[-2:-5:-1] )? # 切片-2--5: cin |
3、len:長(zhǎng)度
1 2 | msg = 'hello nick嗯'print(len(msg)) # 11 |
4、in、not in:成員運(yùn)算
1 2 3 4 5 | msg = 'my name is nick, nick handsome'print('nick' in msg) # Trueprint('jason' not in msg) # Trueprint(not 'jason' in msg) # True |
5、移除空白
- 移除左右空白:strip(chars)
- 移除左空白:?lstrip(chars)
- 移除右空白:rstrip(chars)
1 2 3 4 5 | name = '&&&n ick?????? 'print(name.strip())? # &&&n ick,注意 strip()默認(rèn)為‘ 'print(name.strip('&'))? # n ick?????? ,strip并且不修改原值,新創(chuàng)建空間print(name)? # name: &&&n ick?????? ,print('*-& nick+'.strip('*-& +'))? # nick |
6、拆分,split,返回一個(gè)列表
- 拆分:split(str="", num=string.count(str)):以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num+1 個(gè)子字符串,返回一個(gè)列表;
- 右拆分:rsplit
1 2 3 4 | info = 'nick:male:19'info_list1 = info.split(':')? # ['nick', 'male', '19']info_list2 = info.split(':', 1)? # ['nick', 'male:19']print(info.rsplit(':', 1))? # ['nick:male', '19']。 從右開始切割 |
- 拆分行:splitlines([keepends]):按照行('\r', '\r\n', \n')分隔,返回一個(gè)包含各行作為元素的列表,如果參數(shù) keepends 為 False,不包含換行符,如果為 True,則保留換行符。
1 2 3 4 5 6 | info = """aaabbbccc"""print(info.splitlines())? # ['aaa', 'bbb', 'ccc']print(info.splitlines(True))? # ['aaa\n', 'bbb\n', 'ccc\n'] |
7、for循環(huán)
1 2 | msg = 'hello nick'for i in msg: print(i) # 一個(gè)一個(gè)字符打印出來(lái) |
8、大小寫,返回字符串的副本
- lower:轉(zhuǎn)成小寫
- upper:轉(zhuǎn)成小寫
1 2 3 | name = 'Nick Chen'print(name.lower())? # nick chenprint(name.upper())? # NICK CHEN |
- captalize:將字符串的第一個(gè)字符轉(zhuǎn)換為大寫
- swapcase:將字符串中大寫轉(zhuǎn)換為小寫,小寫轉(zhuǎn)換為大寫
- title:返回"標(biāo)題化"的字符串,就是說(shuō)所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
1 2 3 4 | name = 'nick handsome sWAPCASE'print(name.capitalize())? # Nick handsome swapcaseprint(name.swapcase())? # NICK HANDSOME Swapcase? 大小寫互轉(zhuǎn)print(name.title())? # Nick Handsome Swapcase |
9、首末字符判斷
- startswith:首字符判斷
- endswith:末字符判斷
1 2 3 | name = 'Nick Chen'print(name.startswith('Nick'))? # Trueprint(name.endswith('chen'))? # False |
10、join(seq):以此字符串作為分隔符,連接字符串。
以指定字符串作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串
1 2 3 4 5 6 7 | lis = ['nick', 'male', '19']print(':'.join(lis))? # nick:male:19print(",".join("12345"))? # 1,2,3,4,5str = "-"seq = ("a", "b", "c")? # 字符串元組print(str.join(seq))? # a-b-c |
11、替換:replace
replace(old, new [, max]):把 將字符串中的 str1 替換成 str2,如果 max 指定,則替換不超過(guò) max 次。
1 2 | name = 'nick shuai'print(name.replace('shuai', 'handsome'))? # nick handsome |
12、is***:數(shù)據(jù)類型判斷
1 2 | salary = '111.1'print(salary.isdigit())? # False |
- isdecimal(): 檢查字符串是否值包含十進(jìn)制字符,如果是返回True,否則返回False。
- isdigit(): 如果字符串只包含數(shù)字則返回True,否則返回False。
- isnumeric(): 如果字符串中只包含數(shù)字字符,則返回True,否則返回False。
- isalnum(): 如果字符串所有字符都是字母或數(shù)字則返回True,否則返回False。
- isalpha(): 如果字符串所有字符都是字母則返回True,否則返回False。
- isupper(): 如果字符串中(區(qū)分大小寫的)字符都是大寫,則返回True,否則返回False。
- islower(): 如果字符串中(區(qū)分大小寫的)字符都是小寫,則返回True,否則返回False。
- isspace(): 如果字符串中只包含空白,則返回True,否則返回False
- istitle(): 如果字符串是標(biāo)題類型的(見title()),則返回True,否則返回False。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | num = "1"? # unicodenum.isdigit()? # Truenum.isdecimal()? # Truenum.isnumeric()? # Truenum = "1"? # 全角num.isdigit()? # Truenum.isdecimal()? # Truenum.isnumeric()? # Truenum = b"1"? # bytenum.isdigit()? # Truenum.isdecimal()? # 屬性錯(cuò)誤 'bytes' object has no attribute 'isdecimal'num.isnumeric()? # 屬性錯(cuò)誤 'bytes' object has no attribute 'isnumeric'num = "IV"? # 羅馬數(shù)字num.isdigit()? # Truenum.isdecimal()? # Falsenum.isnumeric()? # Truenum = "四"? # 漢字num.isdigit()? # Falsenum.isdecimal()? # Falsenum.isnumeric()? # True |
13、unicodeData
- 1.unicodedata.lookup():通過(guò)索引中的名稱查找相應(yīng)的字符
- 2.unicodedata.name():通過(guò)字符查找名稱,與unicodedata.lookup()相反
- 4.unicodedata.digit():把一個(gè)合法的數(shù)字字符串轉(zhuǎn)換為數(shù)字值
- 3.unicodedata.decimal():返回表示數(shù)字字符的數(shù)值
- 5.unicodedata.numeric():把一個(gè)表示數(shù)字的字符串轉(zhuǎn)換為浮點(diǎn)數(shù)返回,與unicodedata.digit()不同的是:它可以任意表示數(shù)值的字符都可以,不僅僅限于0到9的字符
- 6.unicodedata.category():把一個(gè)字符返回它在UNICODE里分類的類型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import unicodedataunicodedata.digit("2")? # 2unicodedata.decimal("2")? # 2unicodedata.numeric("2")? # 2.0unicodedata.digit("2")? # 2unicodedata.decimal("2")? # 2unicodedata.numeric("2")? # 2.0unicodedata.digit(b"3")? # TypeError: must be str, not bytesunicodedata.decimal(b"3")? # TypeError: must be str, not bytesunicodedata.numeric(b"3")? # TypeError: must be str, not bytesunicodedata.digit("Ⅷ")? # ValueError: not a digitunicodedata.decimal("Ⅷ")? # ValueError: not a decimal |
unicodedata.numeric("Ⅷ")?#?8.0
1 2 | unicodedata.digit("四")? # ValueError: not a digitunicodedata.decimal("四")? # ValueError: not a decimal |
unicodedata.numeric("四")?#?4.0
14、查找:find、 index
- find(str, beg=0, end=len(string)):檢測(cè) str 是否包含在字符串中。如果指定范圍 beg 和 end ,則檢查是否包含在指定范圍內(nèi),如果包含返回開始的索引值,否則返回-1。
- rfind(str, beg=0,end=len(string)):類似于 find()函數(shù),不過(guò)是從右邊開始查找
- index(str, beg=0, end=len(string)):跟find()方法一樣,只不過(guò)如果str不在字符串中會(huì)報(bào)一個(gè)異常
- rindex:類似于 index(),不過(guò)是從右邊開始
- count(str, beg= 0,end=len(string)):返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
1 2 3 4 5 6 7 | msg = 'my name is tank, tank shi sb, hha'print(msg.find('tank'))? # 11print(msg.find('tank', 0, 3))? # -1,找不到返回-1print(msg.rfind('tank'))? # 17,找不到返回-1print(msg.index('tank'))? # 11.找不到報(bào)錯(cuò)print(msg.rindex('tank'))? # 17 找不到報(bào)錯(cuò)print(msg.count('tank'))? # 2 |
15、填充
- center(width[, fillchar]):返回一個(gè)原字符串居中對(duì)齊,并使用 fillchar 填充至長(zhǎng)度。width 的新字符串,fillchar 默認(rèn)為空格。
- ljust(width[, fillchar]):返回一個(gè)原字符串左對(duì)齊,并使用 fillchar 填充至長(zhǎng)度。
- rjust(width[, fillchar]):返回一個(gè)原字符串右對(duì)齊,并使用空格填充至長(zhǎng)度 width 的新字符串。
- zfill(width):返回長(zhǎng)度為 width 的字符串,原字符串 string 右對(duì)齊,前面填充0。
1 2 3 4 | print('info nick'.center(20, '*'))? # *****info nick******print('info nick'.ljust(20, '*'))? # info nick***********print('info nick'.rjust(20, '*'))? # ***********info nickprint('info nick'.zfill(20))? # 00000000000info nick, 默認(rèn)用0填充 |
16、expandtabs(tabsize=8):把字符串中的 tab 符號(hào)轉(zhuǎn)為空格
tab 符號(hào)默認(rèn)的空格數(shù)是 8 。
1 2 | print('a\tb\tc\t')? # a??? b??? c??? ,默認(rèn)制表符8個(gè)空格print('a\tb\tc\t'.expandtabs(10)) # a???????? b???????? c???????? . |
17、encode、decode:字符編碼解碼
Python3中字符串默認(rèn)為Unicode編碼。
str類型的數(shù)據(jù)可以編碼成其他字符編碼的格式,編碼的結(jié)果為bytes類型。
1 2 3 4 5 6 7 | # coding:gbkx = '上'? # 當(dāng)程序執(zhí)行時(shí),無(wú)需加u,'上'也會(huì)被以Unicode形式保存新的內(nèi)存空間中,print(type(x))? # <class 'str'># x可以直接encode成任意編碼格式print(x.encode('gbk'))? # b'\xc9\xcf'print(type(x.encode('gbk')))? # <class 'bytes'> |
- str.encode(encoding='UTF-8',errors='strict'):以 encoding 指定的編碼格式編碼字符串,如果出錯(cuò)默認(rèn)報(bào)一個(gè)ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
- bytes.decode(encoding="utf-8", errors="strict"):解碼給定的 bytes 對(duì)象,這個(gè) bytes 對(duì)象可以由 str.encode() 來(lái)編碼返回。
1 2 3 4 5 6 7 8 | a = "asdfasdfffsa師德師風(fēng)的"b = a.encode(encoding='UTF-8', errors='strict')print(type(b))? # <class 'bytes'>print(b)? # b'asdfasdfffsa\xe5\xb8\x88\xe5\xbe\xb7\xe5\xb8\x88\xe9\xa3\x8e\xe7\x9a\x84'c = b.decode(encoding="utf-8", errors="strict")print(type(c))? # <class 'str'>print(c)? # asdfasdfffsa師德師風(fēng)的 |
18、字符串與列表,元組的互相轉(zhuǎn)換。
1、字符串轉(zhuǎn)換為列表:for循環(huán)
1 2 3 | var='菜鳥教程'list=[]list= [i for i in var] |
2、列表轉(zhuǎn)化為字符串:使用 join 來(lái)實(shí)現(xiàn):
1 | var1=' ,'.join(list) |
3、字符串轉(zhuǎn)化為元組,使用 tuple() 函數(shù)。
1 | tup=tuple(var) |
七、其他數(shù)據(jù)類型
1、分?jǐn)?shù)類型:Fraction
構(gòu)造函數(shù):
- class fractions.Fraction(numerator=0, denominator=1)
- class fractions.Fraction(int|float|str|Decimal|Fraction)
可以同時(shí)提供分子(numerator)和分母(denominator)給構(gòu)造函數(shù)用于實(shí)例化Fraction類,但兩者必須同時(shí)是int類型或者numbers.Rational類型,否則會(huì)拋出類型錯(cuò)誤。當(dāng)分母為0,初始化的時(shí)候會(huì)導(dǎo)致拋出異常ZeroDivisionError。
分?jǐn)?shù)類型:
1 2 3 4 5 6 7 8 | from fractions import Fractionx = Fraction(1, 3)y = Fraction(4, 6)print(x + y)? # 1print(1 / 3 + 4 / 6)? # 1.0print(Fraction('.25'))? # 1/4 |
浮點(diǎn)數(shù)與分?jǐn)?shù)的轉(zhuǎn)換:
1 2 3 4 5 6 7 8 | from fractions import Fractionf = 2.5z = Fraction(*f.as_integer_ratio())print(z)? # 5/2x = Fraction(1, 3)print(float(x))? # 0.3333333333333333 |
2、小數(shù):Decimal類型
decimal 模塊提供了一個(gè) Decimal 數(shù)據(jù)類型用于浮點(diǎn)數(shù)計(jì)算,擁有更高的精度。
1 2 3 4 5 6 7 8 | import decimaldecimal.localcontext().prec= 4? # 指定精度(4位小數(shù))print(decimal.Decimal(1) / decimal.Decimal(7))? # 0.1429with decimal.localcontext() as ctx:? # 小數(shù)上下文管理器????ctx.prec = 2????print(decimal.Decimal('1.00') / decimal.Decimal('3.00'))? # 0.33 |
到此這篇關(guān)于Python數(shù)據(jù)類型的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助



評(píng)論