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