7.python字符串-内置方法分析
上篇對(duì)python中的字符串內(nèi)置方法進(jìn)行了列舉和簡(jiǎn)單說明,但這些方法太多,逐一背下效率實(shí)在太低,下面我來對(duì)這些方法按照其功能進(jìn)行總結(jié):
1.字母大小寫相關(guān)(中文無(wú)效)
1.1?S.upper() -> string?
返回一個(gè)字母全部大寫的副本
1.2 S.lower() -> string?
返回一個(gè)字母全是小寫的副本
1.3?S.swapcase() -> string?
返回一個(gè)字母大小寫轉(zhuǎn)換后的副本
1.4?S.title() -> string?
將單詞的首字母大寫,即為所謂的標(biāo)題
方框里是中文的編碼,可以發(fā)現(xiàn) s 還是大寫了,說明會(huì)無(wú)視其他類型的字符,找到英文單詞就將其首字母大寫
1.6?S.capitalize() -> string?
將字符串的首字母大寫,要注意不是所有單詞,注意和上面的區(qū)別
而且當(dāng)字符串的首字符不是字母的時(shí)候是無(wú)效的
?
1.5 S.isupper() -> bool?
判斷字符串內(nèi)的字母是否全是大寫,字符串中必須要有字母,返回布爾值
和其他字符混合時(shí)情況如下
會(huì)無(wú)視其他字符,只對(duì)字母進(jìn)行判斷
1.6 S.islower() -> bool?
判斷字符串內(nèi)的字母是否全是小寫,字符串中必須要有字母,返回布爾值
和大寫判斷是相對(duì)應(yīng)的,這里不繼續(xù)舉例了。
1.7?S.istitle() -> bool?
判斷字符串是否符合標(biāo)題格式,返回布爾值,關(guān)于python字符串中何為標(biāo)題上面也是詳細(xì)介紹了,這里不多說。
?
?
?
2.字符串組成字符判斷
字符串內(nèi)的字符除了是英文字母之外,還可以有其他字符,有一些方法可以對(duì)字符串的組成字符進(jìn)行判斷
2.1?S.isalpha() -> bool?
判斷字符串是否全是由字母組成,返回布爾值
只有是全字母才行,有數(shù)字和中文等都不行
2.2 S.isdigit() -> bool?
判斷字符串是否全是由數(shù)字組成,返回布爾值
和上面類似,不多說明
2.3 ?S.isalnum() -> bool?
判斷字符串是否全是由字母和數(shù)字組成,返回布爾值
是上面兩種判斷的合并
2.4 ?S.isspace() -> bool?
判斷字符串是否都是由空字符組成,返回布爾值
空字符不意味著字符串為空,如空格,\n 等特殊字符都算是空字符
?
?
3.字符串是否是以某特定字符開頭或結(jié)尾的判斷
3.1 ?S.startswith(prefix[, start[, end]]) -> bool?
判斷是否是以某特定字符開頭,返回布爾值
默認(rèn)是從第一個(gè)字符開始,也就是索引值為0開始,可以用索引來指定對(duì)某個(gè)范圍的字符進(jìn)行判斷
3.2?S.endswith(suffix[, start[, end]]) -> bool?
判斷是否是以某特定字符結(jié)尾,返回布爾值
和上面類似,不多解釋
?
關(guān)于字符串中帶判斷的就是這么多,下面總結(jié)一下究竟可以判斷什么:
1.字符串里的字母是否全是小寫或大寫
2.字符串是否符合標(biāo)題格式的判斷
3.字符串的組成是否是全字母,全數(shù)字,或全是字母和數(shù)字,或者全是空字符
4.字符串是否是以給定的字符開頭或結(jié)尾
?
?
4.在字符串內(nèi)尋找給定字符
4.1?S.find(sub [,start [,end]]) -> int?
在原字符串內(nèi)尋找給定的字符,找到了的第一個(gè),返回其索引值,沒找到返回-1
注意是從左向右尋找,找到的第一個(gè),像這里的 o ,在原字符串有多個(gè),但只返回了第一個(gè)的索引值,另外當(dāng)給的字符不只一個(gè)時(shí),按給的字符串的第一個(gè)字符作為基準(zhǔn)點(diǎn),如這里的 co 返回的就是 c 的索引值。當(dāng)然可以指定范圍,但指定范圍其并不意味會(huì)重新計(jì)算索引值,得到的依然是相對(duì)于整個(gè)字符串的索引。
4.2?S.rfind(sub [,start [,end]]) -> int?
與上面的相同,只不過是從右往左尋找。
?
4.3? S.index(sub [,start [,end]]) -> int?
? 和 find() 方法基本一樣,只不過?find() 找不到時(shí)返回的是-1,而 index() 找不到是會(huì)報(bào)錯(cuò)。
4.4?S.rindex(sub [,start [,end]]) -> int?
同理,這個(gè)是從右往左找
?
?
5.字符串出現(xiàn)的計(jì)數(shù)
和尋找類似,不過上面介紹的尋找的方法都只是找到第一個(gè),如果我想知道某個(gè)特定的字符串在原字符中出現(xiàn)了多少次的時(shí)候怎么辦,就可以使用計(jì)數(shù)了。
5.1 S.count(sub[, start[, end]]) -> int?
?
?
這個(gè)方法會(huì)找到范圍內(nèi)所有指定的子字符串,返回其出現(xiàn)的次數(shù),沒找到的話則返回0
?
?
6.字符的替換
注意,雖然說是替換,但原字符串是不可變的,我在上篇也說過,字符串的所有方法都沒有改變?cè)址旧?#xff0c;都是返回了一個(gè)新的對(duì)象。
所謂的替換,只是針對(duì)于返回對(duì)象的效果而已。
5.1 S.replace(old, new[, count]) -> string?
可以看出原字符串本身是不變的,只是返回了一個(gè)新對(duì)象,這個(gè)對(duì)象在內(nèi)存之中,如果后面要有利用這個(gè)新對(duì)象的話,可以將其賦值給變量,當(dāng)然也可以當(dāng)做函數(shù)的參數(shù)直接傳參,但傳參的時(shí)候要注意數(shù)據(jù)類型。
其中,count 指定要替換的次數(shù),不指定則全部替換
?
?
7.字符串中的對(duì)齊和填充等
這里的操作類似于在world中編輯文字,所以可以聯(lián)想理解。
7.1?S.ljust(width[, fillchar]) -> string?
? 左對(duì)齊
? 首先要體現(xiàn)對(duì)齊的效果要有一個(gè)前提,那就是那一行不能是滿的,否則無(wú)論怎么對(duì)齊也沒有用,而在python中,一個(gè)字符串對(duì)象默認(rèn)就是占滿一行的,其行寬就是字符串是長(zhǎng)度。
? 但是,當(dāng)我強(qiáng)制聲明這一行的寬度是多少,而這個(gè)寬度(width)大于原字符串的長(zhǎng)度(小于無(wú)效,但不會(huì)報(bào)錯(cuò)),此時(shí)對(duì)齊就有效果了。
? ? 為了體現(xiàn)效果我將光標(biāo)放上去了,否則都是空格看不出來。
我們將一行的寬度設(shè)置為15,而原字符串我用?len()內(nèi)置函數(shù)得出其長(zhǎng)度,可以知道原字符串長(zhǎng)度為11。當(dāng)我指定一行長(zhǎng)為15,并設(shè)置左對(duì)齊,右邊的多出來的位置就默認(rèn)用空格填充了,當(dāng)然我們也可以指定用什么填充(fillchar),但只能是字符串類型。
注意,只能用一個(gè)字符,且不能用中文。
?
7.2 ?S.rjust(width[, fillchar]) -> string?
右對(duì)齊,原理同上
7.3 ?S.center(width[, fillchar]) -> string?
居中對(duì)齊,原理也一樣,但是這里指定的寬度是兩邊的和,且多出來的位置無(wú)法平均分配到兩邊的話會(huì)優(yōu)先給右邊
設(shè)置為15時(shí),多出來的位置是15-11=4,可以平均分到兩邊去,每邊都是4/2=2個(gè)位置,但設(shè)置為16時(shí),16-11=5,5個(gè)位置無(wú)法平均分配,此時(shí)優(yōu)先給右邊多一個(gè)。
7.4?S.zfill(width) -> string?
快捷的填充方式,只不過只能是右對(duì)齊,且填充的內(nèi)容為 0
?
7.5 S.strip([chars]) -> string or unicode?
除了填充外,我們還可以反填充,這個(gè)方法是去掉格式類似于填充后的字符串內(nèi)的填充內(nèi)容的。
但是,這并不意味著我們要使用了對(duì)齊填充方法以后才能用,只有格式符合就可以。
默認(rèn)是去除兩邊的空格,不過要注意,中間的空格是不去除的。
當(dāng)然,我們還可以指定去除的字符
只要填充內(nèi)容是一樣的,指定填充字符的時(shí)候用幾個(gè)都無(wú)所謂,就算超過原字符串中的填充字符也可以。
7.6 S.lstrip([chars]) -> string or unicode?
和上面的類似,不過這個(gè)只去除左邊的填充內(nèi)容
7.7 S.rstrip([chars]) -> string or unicode?
同類,只去除右邊的
?
8.字符串的分隔
字符串的分隔是用過給定的標(biāo)記進(jìn)行分隔后,返回一個(gè)由被分隔后的字符串組成的新對(duì)象,就像切菜一樣,畫好標(biāo)記,手起刀落,菜就分成了幾段了。
8.1?S.split([sep [,maxsplit]]) -> list of strings?
方法返回的是一個(gè)列表對(duì)象,seq就是給定的字符串,maxsplit 表示分隔的最大次數(shù),默認(rèn)只要出現(xiàn)給定的分隔字符串都會(huì)進(jìn)行分隔。
其中有一些很奇怪的行為特性,當(dāng)兩個(gè)分隔字符相鄰時(shí),列表的對(duì)應(yīng)位置會(huì)出空字符串元素,最大次數(shù)為0時(shí)不分隔,分隔字符在字符串的最后時(shí)也會(huì)出現(xiàn)空字符串。
另外,分隔是從左向右的,是全部分隔,方向倒是不重要,結(jié)果是一樣的,但如果指定了最大次數(shù),那就有意義了,因?yàn)榉指舸螖?shù)的計(jì)算是從左向右的。
8.2?S.rsplit([sep [,maxsplit]]) -> list of strings?
同上,只不過分隔方向是從右向左
8.3?S.splitlines(keepends=False) -> list of strings?
按照換行符分隔,注意linux中的換行符為 \n ,windows中的換行符為 \r \n
上面的分隔方式都要一個(gè)特點(diǎn),那就是指定的分隔字符是不會(huì)出現(xiàn)到分隔后的結(jié)果中的
8.4 ?S.partition(sep) -> (head, sep, tail)?
和上面的分隔方法相比,這種分隔方法返回的是一個(gè)元祖對(duì)象,且分隔次數(shù)只有一次,另外被按照('分隔字符之前','指定的分隔字符','分隔字符之后')排序。
另外,也是找到的第一個(gè),是從左向右找的。
8.5?S.rpartition(sep) -> (head, sep, tail)?
同上,不過是從右往左找。
?
?
9.特殊字符轉(zhuǎn)義
9.1?S.expandtabs([tabsize]) -> string?
將制表符(\r )換成空格,默認(rèn)一個(gè)制表符轉(zhuǎn)換8個(gè)空格,可以用 tabsize 指定轉(zhuǎn)換空格的個(gè)數(shù)
?
?
10.字符串編碼
10.1?S.decode([encoding[,errors]]) -> object?
解碼
10.2?S.encode([encoding[,errors]]) -> object?
編碼
編解碼問題會(huì)在文件操作中細(xì)講
11.字符串拼接
11.1?S.join(iterable) -> string?
前面的博文詳細(xì)講過,這里不再重復(fù)
12.字符串格式化
12.1 % 運(yùn)算符
前面的博文詳細(xì)講過,這里不再重復(fù)
12.2 ?S.format(*args, **kwargs) -> string?
% 格式化的升級(jí)版,一般% 就夠用了,所以我也沒怎么了解過,這里就不亂說了。
?
?
13.字符串過濾
13.1?S.translate(table [,deletechars]) -> string?
根據(jù)參數(shù)table給出的表(翻譯表,翻譯表是通過maketrans方法轉(zhuǎn)換而來)轉(zhuǎn)換字符串的字符, 要過濾掉的字符放到 del 參數(shù)中。
個(gè)人也沒用過,以后有機(jī)會(huì)就進(jìn)行補(bǔ)充。
?
?
更多的參考資料:戳這里
?
轉(zhuǎn)載于:https://www.cnblogs.com/scolia/p/5532712.html
總結(jié)
以上是生活随笔為你收集整理的7.python字符串-内置方法分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卡特兰数 BZOJ3907 网格 NOI
- 下一篇: 读《构建之法》第 8、9、10 章有感