python 字符串
介紹字符串相關(guān)的:比較,截取,替換,長(zhǎng)度,連接,反轉(zhuǎn),編碼,格式化,查找,復(fù)制,大小寫(xiě),分割等操作
什么是字符串
字符串或串(String)是由數(shù)字恨锚、字母办桨、下劃線組成的一串字符汰蓉。一般記為 s=“a1a2···an”(n>=0)。它是編程語(yǔ)言中表示文本的數(shù)據(jù)類型乞封。 通常以串的整體作為操作對(duì)象,如:在串中查找某個(gè)子串墓卦、求取一個(gè)子串、在串的某個(gè)位置上插入一個(gè)子串以及刪除一個(gè)子串等惹资。兩個(gè)字符串相等的充要條件是:長(zhǎng)度相等福铅,并且各個(gè)對(duì)應(yīng)位置上的字符都相等汛兜。
python 字符串相關(guān)特性
1 屬于python基本數(shù)據(jù)類型和結(jié)構(gòu)的一種。2 本身是不可變的數(shù)據(jù)類型喉脖。 3 有很多內(nèi)置的方法
字符串連接
+直接連接字符串,當(dāng)字符比較多的時(shí)候层皱,效率是比較低的。
a = ['a','b','c','d']
content = ''
for i in a:
content = content + i
print content
說(shuō)下為什么效率會(huì)低呢拳恋?
原因:在循環(huán)連接字符串的時(shí)候谬运,他每次連接一次轰驳,就要重新開(kāi)辟空間蠕趁,然后把字符串連接起來(lái)袋狞,再放入新的空間,再一次循環(huán)贬循,又要開(kāi)辟新的空間咸包,把字符串連接起來(lái)放入新的空間,如此反復(fù)甘有,內(nèi)存操作比較頻繁诉儒,每次都要計(jì)算內(nèi)存空間,然后開(kāi)辟內(nèi)存空間亏掀,再釋放內(nèi)存空間忱反,效率非常低,你也許操作比較少的數(shù)據(jù)的時(shí)候看不出來(lái)滤愕,感覺(jué)影響不大温算,但是你碰到操作數(shù)據(jù)量比較多的時(shí)候,這個(gè)方法就要退休了间影。
除了+ 還有兩種方法可以拼接字符串注竿。
方法1: 用字符串的join方法
a = ['a','b','c','d']
content = ''
content = ''.join(a)
print content
方法2: 用字符串的替換占位符替換
想要了解更多,請(qǐng)看python字符串連接
a = ['a','b','c','d']
content = ''
content = '%s%s%s%s' % tuple(a)
print content
字符串截取
我們可以通過(guò)索引來(lái)提取想要獲取的字符,可以把python的字符串也做為字符串的列表就更好理解
python的字串列表有2種取值順序
是從左到右索引默認(rèn)0開(kāi)始的魂贬,最大范圍是字符串長(zhǎng)度少1
s = 'ilovepython'
s[0]的結(jié)果是i是從右到左索引默認(rèn)-1開(kāi)始的巩割,最大范圍是字符串開(kāi)頭
s = 'ilovepython'
s[-1]的結(jié)果是n
上面這個(gè)是取得一個(gè)字符,如果你的實(shí)際要取得一段子串的話付燥,可以用到變量[頭下標(biāo):尾下標(biāo)]宣谈,就可以截取相應(yīng)的字符串,其中下標(biāo)是從0開(kāi)始算起键科,可以是正數(shù)或負(fù)數(shù)闻丑,下標(biāo)可以為空表示取到頭或尾漩怎。
比如
s = 'ilovepython'
s[1:5]的結(jié)果是love
當(dāng)使用以冒號(hào)分隔的字符串,python返回一個(gè)新的對(duì)象嗦嗡,結(jié)果包含了以這對(duì)偏移標(biāo)識(shí)的連續(xù)的內(nèi)容勋锤,左邊的開(kāi)始是包含了下邊界,比如
上面的結(jié)果包含了s[1]的值l侥祭,而取到的最大范圍不包括上邊界叁执,就是s[5]的值p
字符串替換
字符串替換可以用內(nèi)置的方法和正則表達(dá)式完成。
1用字符串本身的replace方法:
2用正則表達(dá)式來(lái)完成替換:
想要了解更多,請(qǐng)看python 字符串替換
字符串比較
cmp方法比較兩個(gè)對(duì)象卑硫,并根據(jù)結(jié)果返回一個(gè)整數(shù)徒恋。cmp(x,y)如果X< Y,返回值是負(fù)數(shù) 如果X>Y 返回的值為正數(shù)蚕断。
字符串相加
我們通過(guò)操作符號(hào)+來(lái)進(jìn)行字符串的相加欢伏,不過(guò)建議還是用其他的方式來(lái)進(jìn)行字符串的拼接,這樣效率高點(diǎn)亿乳。
原因:在循環(huán)連接字符串的時(shí)候硝拧,他每次連接一次,就要重新開(kāi)辟空間葛假,然后把字符串連接起來(lái)障陶,再放入新的空間,再一次循環(huán)聊训,又要開(kāi)辟新的空間抱究,把字符串連接起來(lái)放入新的空間,如此反復(fù)带斑,內(nèi)存操作比較頻繁鼓寺,每次都要計(jì)算內(nèi)存空間锰瘸,然后開(kāi)辟內(nèi)存空間勾缭,再釋放內(nèi)存空間,效率非常低立哑。
字符串查找
python 字符串查找有4個(gè)方法挂滓,1 find,2 index方法苦银,3 rfind方法,4 rindex方法。
1 find()方法:
2 index()方法:
python 的index方法是在字符串里查找子串第一次出現(xiàn)的位置赶站,類似字符串的find方法幔虏,不過(guò)比f(wàn)ind方法更好的是,如果查找不到子串贝椿,會(huì)拋出異常想括,而不是返回-1
字符串分割
字符串分割,可以用split,rsplit方法团秽,通過(guò)相應(yīng)的規(guī)則來(lái)切割成生成列表對(duì)象
字符串翻轉(zhuǎn)
通過(guò)步進(jìn)反轉(zhuǎn)[::-1]
字符串編碼
通過(guò)字符串的decode和encode方法
1 encode([encoding,[errors]])
其中encoding可以有多種值主胧,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持叭首。errors默認(rèn)值為"strict",意思是UnicodeError踪栋”焊瘢可能的值還有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通過(guò)codecs.register_error注冊(cè)的值。
S.decode([encoding,[errors]]) 下面是字符串編碼應(yīng)用:
字符串追加和拼接
通過(guò)字符串的占位符來(lái)進(jìn)行字符串的拼接
字符串復(fù)制
通過(guò)變量來(lái)進(jìn)行賦值
字符串長(zhǎng)度
通過(guò)內(nèi)置方法len()來(lái)計(jì)算字符串的長(zhǎng)度夷都,注意這個(gè)計(jì)算的是字符的長(zhǎng)度眷唉。
字符串大小寫(xiě)
通過(guò)下面的upper(),lower()等方法來(lái)轉(zhuǎn)換大小寫(xiě)
S.upper()#S中的字母大寫(xiě)
S.lower() #S中的字母小寫(xiě)
S.capitalize() #首字母大寫(xiě)
S.istitle() #S是否是首字母大寫(xiě)的
S.isupper() #S中的字母是否便是大寫(xiě)
S.islower() #S中的字母是否全是小寫(xiě)
字符串去空格
通過(guò)strip(),lstrip(),rstrip()方法去除字符串的空格
S.strip()去掉字符串的左右空格
S.lstrip()去掉字符串的左邊空格
S.rstrip()去掉字符串的右邊空格
字符串其他方法
字符串相關(guān)的其他方法:count(),join()方法等。
S.center(width, [fillchar]) #中間對(duì)齊
S.count(substr, [start, [end]]) #計(jì)算substr在S中出現(xiàn)的次數(shù)
S.expandtabs([tabsize]) #把S中的tab字符替換沒(méi)空格囤官,每個(gè)tab替換為tabsize個(gè)空格冬阳,默認(rèn)是8個(gè)
S.isalnum() #是否全是字母和數(shù)字,并至少有一個(gè)字符
S.isalpha() #是否全是字母党饮,并至少有一個(gè)字符
S.isspace() #是否全是空白字符肝陪,并至少有一個(gè)字符
S.join()#S中的join,把列表生成一個(gè)字符串對(duì)象
S.ljust(width,[fillchar]) #輸出width個(gè)字符刑顺,S左對(duì)齊氯窍,不足部分用fillchar填充,默認(rèn)的為空格蹲堂。
S.rjust(width,[fillchar]) #右對(duì)齊
S.splitlines([keepends]) #把S按照行分割符分為一個(gè)list狼讨,keepends是一個(gè)bool值,如果為真每行后而會(huì)保留行分割符柒竞。
S.swapcase() #大小寫(xiě)互換