注:本文所有代碼均經(jīng)過(guò)Python 3.7實(shí)際運(yùn)行檢驗(yàn)塞祈,保證其嚴(yán)謹(jǐn)性邑飒。
字符串的表示
Python提供了4種表示字符串的方法:
s1 = '我'
s2 = "我"
s3 = '''我'''
s4 = """我"""
大多數(shù)情況下循签,以上4種字符串的表示效果是一樣的,只要注意前后的引號(hào)一定是成對(duì)的疙咸;換句話(huà)說(shuō)县匠,前面是單引號(hào)后面一定也是單引號(hào),前面是3個(gè)雙引號(hào)撒轮,后面句不能用3個(gè)單引號(hào)結(jié)尾乞旦。
默認(rèn)來(lái)說(shuō),單純的字符串一般多用第1種腔召,即兩個(gè)單引號(hào)杆查。3個(gè)單引號(hào)和3個(gè)雙引號(hào)有特殊的用途扮惦,就是它們可以用于多行字符串引用臀蛛,如下面的例子:
s = '''
人生到處知何似,應(yīng)似飛鴻踏雪泥:
泥上偶然留指爪,鴻飛那復(fù)計(jì)東西浊仆。
老僧已死成新塔客峭,壞壁無(wú)由見(jiàn)舊題。
往日崎嶇還記否抡柿,路長(zhǎng)人困蹇驢嘶舔琅。'''
print(s)
<<< # 正確輸出,且是分行的洲劣。
人生到處知何似备蚓,應(yīng)似飛鴻踏雪泥:
泥上偶然留指爪,鴻飛那復(fù)計(jì)東西囱稽。
老僧已死成新塔郊尝,壞壁無(wú)由見(jiàn)舊題。
往日崎嶇還記否战惊,路長(zhǎng)人困蹇驢嘶流昏。
<<<
這種這種功能是2個(gè)單引號(hào)或2個(gè)雙引號(hào)表示法所不能做到的。如果多行字符串用2個(gè)單引號(hào)或2個(gè)雙引號(hào)來(lái)表示的話(huà)吞获,系統(tǒng)會(huì)報(bào)錯(cuò)况凉。如下所示:
s = '人生到處知何似,應(yīng)似飛鴻踏雪泥:
泥上偶然留指爪各拷,鴻飛那復(fù)計(jì)東西刁绒。
老僧已死成新塔,壞壁無(wú)由見(jiàn)舊題烤黍。
往日崎嶇還記否膛锭,路長(zhǎng)人困蹇驢嘶。'
print(s)
<<<
File "C:\xxxxx\test.py", line 1
s = '人生到處知何似蚊荣,應(yīng)似飛鴻踏雪泥:
^
SyntaxError: EOL while scanning string literal
<<<
轉(zhuǎn)義符\
轉(zhuǎn)義符表達(dá)特定字符的本意初狰。
轉(zhuǎn)義符和某些字母搭配有固定的意思,比如
"\b"回退互例,"\n"換行(光標(biāo)移動(dòng)到下行首)奢入,"\r"回車(chē)(光標(biāo)移動(dòng)到本行首)等。
字符串操作符
n * x 或 x * n:復(fù)制n次字符串x媳叨。
字符串處理函數(shù)
hex(x):整數(shù)x轉(zhuǎn)化為以字符串形式表示的十六進(jìn)制的數(shù)腥光。
oct(x):整數(shù)x轉(zhuǎn)化八進(jìn)制以字符串形式表示的八進(jìn)制的數(shù)。
chr(u):u為Unicode編碼糊秆,返回其對(duì)應(yīng)的字符武福。
ord(x):x為字符,返回其對(duì)應(yīng)的Uniocde編碼痘番。比如ord("A")輸出65捉片,ord("B")輸出66平痰,ord("a")輸出97。
Unicode編碼
Python 3的字符串的編碼方式
- 統(tǒng)一字符編碼伍纫,即覆蓋幾乎所有字符的編碼方式宗雇。
- 0到1114111(0x10FFFF)空間,每個(gè)編碼對(duì)應(yīng)一個(gè)字符莹规。
- Python字符串中每個(gè)字符都是Unicode編碼字符赔蒲。
for i in range(12):
print(chr(9800 + i), end = "")
<<<????????????
以上是輸出Unicode中十二星座的符號(hào)。
字符串處理方法
“方法”(method)良漱,在編程中是一個(gè)專(zhuān)有名詞舞虱。
“方法”特指<a>.<b>()風(fēng)格中的函數(shù)<b>()。
方法本身也是函數(shù)母市,但與<a>有關(guān)砾嫉,<a>.<b>()風(fēng)格(面向?qū)ο缶幊蹋┦褂谩?lt;a>.<b>()就是對(duì)象.方法()。a是對(duì)象窒篱,b是方法焕刮。
字符串和變量都是<a>,也就是對(duì)象墙杯,存在一些方法配并。
字符串的方法及引用
str.lower()或str.upper()——返回字符串的副本,全部字符小寫(xiě)/大寫(xiě)高镐。
str.split(sep=None, num=-1)——返回一個(gè)列表溉旋。
其中,sep是separater的前三個(gè)字母嫉髓,表示分隔符观腊。sep分隔符默認(rèn)為所有的空字符,包括空格算行、換行(\n)梧油、制表符(\t)等,也可以為空(即不帶任何東西州邢,不帶引號(hào)儡陨,如(str.split()),也可以為空格(如str.split(" "))量淌,但不能為空字符串(str.split(""))骗村,否則會(huì)報(bào)錯(cuò)ValueError: empty separator;num表示分隔的次數(shù)呀枢,默認(rèn)為-1胚股,即全部分隔。
此方法可以將字符串轉(zhuǎn)化成列表裙秋。如"A, B, C".split(",")結(jié)果為['A', 'B', 'C']琅拌。
s = 'a-b-c'
l = s.split('-')
print(l)
l = s.split() #分隔符sep為空的情況缨伊。
print(l)
l = s.split('-', 1) #分隔次數(shù)為1的情況。
print(l)
<<<
['a', 'b', 'c']
['a-b-c'] #分隔符sep為空的情況财忽。#
['a', 'b-c'] #分隔次數(shù)為1的情況。#
<<<
str.count(sub)——返回子串sub在str中出現(xiàn)的次數(shù)泣侮。
str.replace(old, new)——返回字符串str的副本即彪,其中所有old子串被替換為new。
str.center(width[, fillchar])——字符串str根據(jù)寬度width居中活尊,fillchar可選隶校。
s1 = "Python"
s2 = s1.center(20, "=")
print("s2是:")
print(s2)
print("len(s2) =", len(s2))
<<<
s2是:
=======Python======= #字符串s2的長(zhǎng)度len為20
len(s2) = 20
<<<
str.strip()——返回str的副本,這個(gè)副本原字符串的頭和尾的空格蛹锰,以及位于頭尾的\n \t之類(lèi)的字符給刪掉了深胳。注意,字符中間的空格等符號(hào)不刪除铜犬。比如" Py thon ".strip()返回為"Py thon"舞终。
str.strip(chars)——從str中去掉在其左側(cè)和右側(cè)chars字符串中含有的字符。如"= python= ".strip(" =np")的輸出為"ytho"癣猾。
sep.join(seq)——sep表示分隔符敛劝,可以為空,但當(dāng)sep為空時(shí)纷宇,就沒(méi)有分隔符了夸盟。seq表示要連接的元素序列,比如字符串像捶、元組上陕、字典、集合拓春。如果序列里的元素為int释簿,必須轉(zhuǎn)化為str才能使用該方法。實(shí)現(xiàn)的效果是硼莽,把seq轉(zhuǎn)換為字符串辕万,并且在seq中的除最后元素外每個(gè)元素后增加一個(gè)sep,返回一個(gè)以分隔符sep連接各個(gè)元素后生成的字符串沉删。此方法主要為了字符增加分隔符渐尿,將列表等seq轉(zhuǎn)化為字符串。
值得注意的是矾瑰,字典雖然是無(wú)序的砖茸,但是使用了sep.join(seq)方法后,輸出的字符串只輸出鍵而不輸出值殴穴,而且其鍵輸出的順序是按照字典本身的順序來(lái)的凉夯。集合則遵循無(wú)序的原則货葬。
s = "abcde" # seq為字符串時(shí)
l = ['a', 'b', 'c', 'd', 'e'] # seq為列表時(shí)
d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
S = {'a', 'b', 'c', 'd', 'e'}
i = '' # sep為空
j = "-" # sep不為空
print("sep為空時(shí):字符串轉(zhuǎn)化為{},列表轉(zhuǎn)化為{}劲够。".format(i.join(s), i.join(l)))
print("sep不為空時(shí):字符串轉(zhuǎn)化為{}震桶,列表轉(zhuǎn)化為{}。".format(j.join(s), j.join(l)))
print("sep為空時(shí):字典轉(zhuǎn)化為{}征绎,集合轉(zhuǎn)化為{}蹲姐。".format(i.join(d), i.join(S)))
print("sep不為空時(shí):字典轉(zhuǎn)化為{},集合轉(zhuǎn)化為{}人柿。".format(j.join(d), j.join(S)))
<<<
sep為空時(shí):字符串轉(zhuǎn)化為abcde柴墩,列表轉(zhuǎn)化為abcde。
sep不為空時(shí):字符串轉(zhuǎn)化為a-b-c-d-e凫岖,列表轉(zhuǎn)化為a-b-c-d-e江咳。
sep為空時(shí):字典轉(zhuǎn)化為abcde,集合轉(zhuǎn)化為ceabd哥放。
sep不為空時(shí):字典轉(zhuǎn)化為a-b-c-d-e歼指,集合轉(zhuǎn)化為c-e-a-b-d。
<<<
上述字符串的諸多方法中甥雕,str.split(sep=None, num=-1)和sep.join(seq)兩個(gè)可能是比較重要且容易弄混的东臀。它們的重要性在于它們能夠使得字符串和列表(后面要學(xué)的一種重要數(shù)據(jù)類(lèi)型)之間互相轉(zhuǎn)換。請(qǐng)對(duì)它們稍微留意一二犀农,多看看它們?cè)诒疚睦锵鄳?yīng)的例子惰赋。
字符串的索引和切片
字符串還有一種非常重要的操作,也是最常用的操作之一呵哨,那就是切片(slicing)赁濒。
而字符串的切片操作是根據(jù)索引(index)進(jìn)行的,其目的是從字符串提取里面的元素或子串孟害。
索引(indexing)
任意一個(gè)字符串拒炎,除了有其字面上的元素外,其實(shí)還有字面外的隱藏元素挨务,也就是字面元素對(duì)應(yīng)的“編號(hào)”击你。比如s = 'abc','a'不光是s中的元素谎柄,還是s中的第1個(gè)元素丁侄。
Python中字符串有兩套編號(hào):
- 從左向右的編號(hào),采用非負(fù)整數(shù)編號(hào)朝巫。從0開(kāi)始編號(hào)鸿摇,向右依次加1。對(duì)s = 'abc'而言劈猿,s[0] = 'a'表示s的第1個(gè)元素拙吉,s[1] = 'b'表示s的第2個(gè)元素潮孽,依此類(lèi)推。
- 從右向左的編號(hào)筷黔,采用負(fù)整數(shù)編號(hào)往史。從-1開(kāi)始,向左依次減1佛舱。對(duì)s = 'abc'而言椎例,s[-1] = 'c'表示s的倒數(shù)第1個(gè)元素,s[-2] = 'b'表示s的
倒數(shù)第2個(gè)字符名眉,依此類(lèi)推粟矿。
s = 'abc'
s[0] # s的第1個(gè)元素
Out[10]: 'a'
s[1]
Out[11]: 'b'
s[-1] # s的倒數(shù)第1個(gè)元素
Out[12]: 'c'
s[-2]
Out[13]: 'b'
切片(Slicing)
切片語(yǔ)法的原型是s[start:stop:stepSize]凰棉,其中start损拢、stop和stepSize三個(gè)參數(shù)均是可選參數(shù)。
start:切片開(kāi)始的元素的索引(index)撒犀,該索引對(duì)應(yīng)的元素包含在切片后的字符串當(dāng)中福压。
stop:切片結(jié)束的元素的索引(index),該索引對(duì)應(yīng)的元素不包含在切片后的字符串當(dāng)中或舞。
stepSize:切片時(shí)的步長(zhǎng)荆姆,默認(rèn)為1。
要正確理解切片的這幾個(gè)函數(shù)映凳。請(qǐng)參考range()函數(shù)中的同樣的參數(shù)胆筒,它們的含義是相通的。range()函數(shù)詳解請(qǐng)移步Python零基礎(chǔ)入門(mén)學(xué)習(xí)02:Python基本數(shù)據(jù)類(lèi)型:數(shù)字類(lèi)型查看最后一部分诈豌。
切片語(yǔ)法的最簡(jiǎn)形式是s[:]仆救,其效果就是s字符串本身,即s[:]=s矫渔。其簡(jiǎn)單形式還有s[::]彤蔽,效果等同于s[:]。還有s[start: : ]庙洼、s[:stop:]顿痪、s[: :stepSize]等形式。
'abc'[1:3]油够,表示從index=1的元素開(kāi)始獲取蚁袭,直到取到index=3的元素,但不獲取index=3的元素石咬。這里是切片的幾個(gè)例子:
s = 'abc'
s[1:3]
Out[15]: 'bc'
s[:]
Out[16]: 'abc'
s[1:]
Out[17]: 'bc'
s[1::2]
Out[18]: 'b'
To be continued.