文章首發(fā)于微信公眾號(hào):可樂(lè)python說(shuō)
前言
Python3 中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型花沉,它們分別是數(shù)字(Number)坟比、字符串(String)本姥、列表(List)舞肆、元組(Tuple)焦辅、集合(Set)、字典(Dictionary)椿胯。
數(shù)據(jù)類型分類可變數(shù)據(jù)類型筷登、和不可變數(shù)據(jù)類型,其中可變類型包括列表压状、字典仆抵、集合,不可變類型包括數(shù)字种冬、字符串镣丑、元組。
本文主要介紹 Python 中字符串的內(nèi)建函數(shù)娱两,并配上相關(guān)代碼莺匠,便于理解、吸收十兢。
字符串簡(jiǎn)介
Python中的字符串使用單引號(hào) ''
或雙引號(hào) ""
括起來(lái)趣竣,同時(shí)使用反斜杠 \
轉(zhuǎn)義特殊字符,實(shí)際工作當(dāng)中旱物,接觸遥缕、處理最多的數(shù)據(jù)類型,莫過(guò)于字符串了宵呛。
下面使用兩種方式定義字符串单匣,兩種方式均可
>>> single_str = 'a我是單引號(hào)括起來(lái)的字符串'
>>> type(single_str) # type 查看數(shù)據(jù)類型
<class 'str'>
>>> double_str = "a我是雙引號(hào)括起來(lái)的字符串"
>>> type(double_str) # type 查看數(shù)據(jù)類型
<class 'str'>
字符串操作
我將字符串操作分為五大類,分別是通用類宝穗、英文單詞類户秤、判斷類、編碼類逮矛、以及其他類鸡号,今天先介紹一下通用類的相關(guān)操作。
通用類
-
replace(old, new [, max])须鼎,把 將字符串中的 old 替換成 new, max 為可選參數(shù)鲸伴,若指定 max ,則替換 max 次晋控。
# 使用語(yǔ)法:str.replace(old, new[, max]) # 用法一:不指定 max 挑围,替換所有 >>> double_str = "my name is kele kele" >>> double_str.replace("kele", "xuebi") 'my name is xuebi xuebi' # 用法二:指定 max ,替換 max 次 >>> double_str.replace("kele", "xuebi", 1) 'my name is xuebi xuebi'
-
split(str="", num=string.count(str))糖荒,以 str 為分隔符截取字符串杉辙,默認(rèn)為所有的空字符,包括空格捶朵、換行
\n
蜘矢、制表符\t
等。若指定 num 综看,則截取出 num+1 個(gè)子字符串品腹,返回包含所有字符串的列表。# 使用語(yǔ)法:str.split(str="", num=string.count(str)) # 用法一:不指定 num 红碑,截取所有 >>> double_str = "mynameiskelekelea" >>> double_str.split("e") ['mynam', 'isk', 'l', 'k', 'l', 'a'] # 用法二:指定 num 舞吭,截取 num 次 >>> double_str.split("e", 1) ['mynam', 'iskelekelea']
-
splitlines([keepends])泡垃,按照行('\r', '\r\n', \n')分隔,返回一個(gè)包含各行作為元素的列表羡鸥,參數(shù) keepends 默認(rèn)為 False蔑穴,不包含換行符,如果為 True惧浴,則保留換行符存和。
# 使用語(yǔ)法:str.splitlines([keepends]) # 用法一:不指定 keepends,默認(rèn)為 False >>> double_str = "my name\nis ke\rle\r\n" >>> double_str.splitlines() ['my name', 'is ke', 'le'] # 用法一:指定 keepends 為 True, 保留切割符 >>> double_str.splitlines(True) ['my name\n', 'is ke\r', 'le\r\n']
-
len(string)衷旅,返回字符串的長(zhǎng)度捐腿。
# 使用語(yǔ)法:len(string) >>> double_str = "my name is kele" >>> len(double_str) 15
-
find(str, beg=0, end=len(string)),檢測(cè) str 是否包含在字符串中柿顶,若指定 beg 和 end 茄袖,則在指定范圍內(nèi)檢測(cè),若包含則返回第一次出現(xiàn)的索引值嘁锯,否則返回 -1绞佩。
# 使用語(yǔ)法:str.find(str, beg=0, end=len(string)) >>> double_str = "my name is kele" >>> double_str.find("h") -1 >>> double_str.find("e") 6 # 指定范圍 >>> double_str.find("i",0猪钮,5) -1
-
rfind(str, beg=0,end=len(string))品山,與 find() 函數(shù)類似,但它是從右邊開始查找烤低,返回字符串最后一次出現(xiàn)的索引值肘交。
# 使用語(yǔ)法:str.rfind(str, beg=0, end=len(string)) >>> double_str = "my name is kele" >>> double_str.rfind("h") -1 >>> double_str.rfind("e") 14 # 指定范圍 >>> double_str.rfind("i",0扑馁,5) -1
-
index(str, beg=0, end=len(string))涯呻,與 find() 函數(shù)類似,但如果 str 不在字符串中會(huì)報(bào)如下錯(cuò)誤腻要。
# 使用語(yǔ)法:str.index(str, beg=0, end=len(string)) >>> double_str = "my name is kele" >>> double_str.index("h") # 元素不在字符串中回報(bào)錯(cuò) Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: substring not found >>> double_str.index("e") 6 # 指定范圍 >>> double_str.index("a"复罐,0,5) 4
-
rindex( str, beg=0, end=len(string))雄家,類似于 index()效诅,不過(guò)是從右邊開始,返回字符串最后一次出現(xiàn)的索引值趟济。
# 使用語(yǔ)法:str.rindex(str, beg=0, end=len(string)) >>> double_str = "my name is kele" >>> double_str.rindex("h") # 元素不在字符串中回報(bào)錯(cuò) Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: substring not found >>> double_str.rindex("e") 14 # 指定范圍 >>> double_str.rindex("a"乱投,0,5) 4
-
count(str, beg= 0,end=len(string))顷编,返回 str 在 string 中出現(xiàn)的次數(shù)戚炫,若指定 beg 或者 end 參數(shù),則返回在指定范圍內(nèi) str 出現(xiàn)的次數(shù)媳纬。
# 使用語(yǔ)法:str.count(str, beg=0, end=len(string)) >>> double_str = "my name is kele" >>> double_str.count("h") 0 >>> double_str.count("e") 3 # 指定范圍 >>> double_str.count("e"双肤,0施掏,7) 1
-
lstrip([chars]),只處理字符串句首的空格或指定字符茅糜,其他位置忽略七芭。
# 使用語(yǔ)法:str.lstrip([chars\) # 處理句首空格 >>> double_str = " 句首 有兩個(gè)空格" >>> double_str.lstrip() '句首 有兩個(gè)空格' # 處理句首指定字符 >>> double_str = "句首句首有一個(gè)空格" >>> double_str.lstrip("句首") '有一個(gè)空格'
-
rstrip([chars]),處理字符串末尾的空格或指定字符限匣,其他位置忽略 抖苦。
# 使用語(yǔ)法:str.rstrip([chars]) # 處理句尾空格 >>> double_str = "句子末尾 有兩個(gè)空格 " >>> double_str.rstrip() '句子末尾 有兩個(gè)空格' # 處理句尾其他字符 >>> double_str = "句尾有一個(gè)空格空格" >>> double_str.rstrip("空格") '句尾有一個(gè)'
-
strip([chars])毁菱, 處理字符串兩端的空格或指定字符米死,可視為 lstrip() 和 rstrip() 的效果疊加。
# 使用語(yǔ)法:str.strip([chars]) # 處理兩端的空格 >>> double_str = " 句首 句尾均有空格 " >>> double_str.strip() '句首 句尾均有空格' # 處理兩端的指定字符 >>> double_str = "你好有一個(gè) 空格你好" >>> double_str.strip("你好") '有一個(gè) 空格'
-
center(width, fillchar)贮庞,fillchar 為填充的字符峦筒,默認(rèn)使用空格填充,返回指定寬度 width窗慎、原字符串居中物喷、使用 fillchar 填充后的字符串。
# 使用語(yǔ)法:str.center(width, fillchar) # 用法一:不指定填充字符遮斥,默認(rèn)使用空字符填充 >>> double_str = "我想通過(guò)兩側(cè)填充來(lái)讓自己變強(qiáng)" >>> double_str.center(20) ' 我想通過(guò)兩側(cè)填充來(lái)讓自己變強(qiáng) ' # 用法二:指定填充字符 【*】 >>> double_str.center(20峦失,"*") '***我想通過(guò)兩側(cè)填充來(lái)讓自己變強(qiáng)***'
-
ljust(width, fillchar)),fillchar 為填充的字符术吗,默認(rèn)使用空格填充尉辑,返回指定寬度 width、原字符串左對(duì)齊较屿、使用 fillchar 填充后的字符串隧魄。
# 使用語(yǔ)法:str.ljust(width, fillchar) # 用法一:不指定填充字符,默認(rèn)使用空字符 >>> double_str = "我想通過(guò)右側(cè)填充讓自己變強(qiáng)" >>> double_str.ljust(20) '我想通過(guò)右側(cè)填充讓自己變強(qiáng) ' # 用法二:指定填充字符 【*】 >>> double_str.ljust(20隘蝎,"*") '我想通過(guò)右側(cè)填充讓自己變強(qiáng)*******'
-
rjust(width, fillchar)购啄,fillchar 為填充的字符,默認(rèn)使用空格填充嘱么,返回指定寬度 width狮含、原字符串靠右對(duì)齊、使用 fillchar 填充后的字符串曼振。
# 使用語(yǔ)法:str.rjust(width, fillchar) # 用法一:不指定填充字符辉川,默認(rèn)使用空字符 >>> double_str = "我想通過(guò)左側(cè)填充讓自己變強(qiáng)" >>> double_str.rjust(20) ' 我想通過(guò)左側(cè)填充讓自己變強(qiáng)' # 用法二:指定填充字符 【*】 >>> double_str.rjust(20,"*") '*******我想通過(guò)左側(cè)填充讓自己變強(qiáng)'
-
zfill (width)拴测,返回長(zhǎng)度為 width 的字符串乓旗,原字符串右對(duì)齊,前面使用 0 填充集索。
# 使用語(yǔ)法:str.zfill (width) >>> double_str = "我想通過(guò)0填充讓自己變強(qiáng)" >>> double_str.zfill(20) '00000000我想通過(guò)0填充讓自己變強(qiáng)'
-
join(seq)屿愚,以指定字符串作為拼接字符汇跨,將 seq 中所有的元素(必須是字符串類型),拼接為一個(gè)新的字符串妆距。
# 使用語(yǔ)法:"[chars]".join(seq) # 嘗試:拼接對(duì)象包含非字符串類型會(huì)報(bào)錯(cuò) >>> seq_list =["我想", "合并", "自己", 1] >>> "".join(seq_list) Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: sequence item 3: expected str instance, int found # 用法一:不指定拼接字符穷遂,默認(rèn)使用空字符 >>> seq_list =["我想", "合并", "自己"] >>> "".join(seq_list) '我想合并自己' # 用法二:指定拼接字符【***】 >>> "***".join(seq_list) '我想***合并***自己'
-
maketrans(input, out),創(chuàng)建字符映射的轉(zhuǎn)換表娱据,第一個(gè)字符串參數(shù)蚪黑,表示需要轉(zhuǎn)換的字符,第二個(gè)字符串參數(shù)表示轉(zhuǎn)換的目標(biāo)中剩。
# 使用語(yǔ)法:str.maketrans(input, out) # 注意:兩個(gè)字符串的長(zhǎng)度必須相同忌穿,否則會(huì)報(bào)如下錯(cuò)誤。 >>> input_str = "預(yù)備開始结啼,1234567" >>> out_str = "哆來(lái)咪發(fā)唆啦西" >>> tran_str = str.maketrans(input_str, out_str) Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: the first two maketrans arguments must have equal length # 正確的使用方式 >>> input_str = "1234567" >>> out_str = "哆來(lái)咪發(fā)唆啦西" >>> tran_str = str.maketrans(input_str, out_str) >>> waiter_tran = "預(yù)備開始掠剑,1234567" >>> waiter_tran.translate(tran_str) '預(yù)備開始,哆來(lái)咪發(fā)唆啦西'
總結(jié)
通用類自建函數(shù)中郊愧, replace朴译、join、strip属铁、count眠寿、split、index焦蘑、len盯拱、find 比較常用。
-
通用類自建函數(shù)支持鏈?zhǔn)秸{(diào)用喇肋,如處理字符串中空字符串和換行符坟乾,我們先使用 replace 處理空字符串,再使用 strip 處理?yè)Q行符蝶防,可直接在后面使用
.
鏈?zhǔn)秸{(diào)用甚侣。>>> double_str = " 我是等待鏈?zhǔn)?調(diào)用處理的字符串 \n" >>> double_str.replace(" ", "").strip() '我是等待鏈?zhǔn)秸{(diào)用處理的字符串'
index、find 效果是一樣的间学,但是 find 有容錯(cuò)機(jī)制殷费,使用時(shí)優(yōu)先選擇。
今天先介紹通用類自建函數(shù)的相關(guān)操作低葫,后續(xù)將介紹其他類函數(shù)的相關(guān)操作详羡。