本節開始我們講python的string數據類型。
Python的字符串用單引號或者雙引號括起來表示。
字符串由若干個有序字符組成,但是python中的字符串是不能改變的,也就是說我們不能通過索引去改變某個字符的值。比如:str[1]= ‘x’這樣的操作是不被允許的。
01
—
轉義字符
所謂轉義字符,就是在其前面增加右斜槓\後,它並不代表其原本的字符含義,而是轉義爲另外的含義。比如‘\n’轉義後表示一個換行符。
Python中用到的轉義字符如下表所示:
轉義字符 |
描述 |
\(在行尾時) |
續行符 |
\\ |
反斜槓符號 |
\' |
單引號 |
\" |
雙引號 |
\a |
響鈴 |
\b |
退格(Backspace) |
\e |
轉義 |
\000 |
空 |
\n |
換行 |
\v |
縱向製表符 |
\t |
橫向製表符 |
\r |
回車 |
\f |
換頁 |
\oyy |
八進制數,yy代表的字符,例如:\o12代表換行 |
\xyy |
十六進制數,yy代表的字符,例如:\x0a代表換行 |
\other |
其它的字符以普通格式輸出 |
# 轉義字符
str1 = 'hello,\nworld!'
# 尾部的\是續行符,表示下一行也算作本行的內容。續行符後面不能再有任何字符,包括空格和註釋
str2 ='hello,\"world!\"' \
'I am Tiger.'
print(str1)
print(str2)
輸出爲:
hello,
world!
hello,"world!"I am Tiger.
對於續行符要注意,它後面不能再有任何字符,包括空格和註釋,否則會報錯。
02
—
截取
字符串截取就是從字符串中獲取部分我們想到的字符,這是用得非常多的一個操作。
Python提供了非常靈活簡單的字符串截取方式。
字符串截取語法如下:
變量[頭下標:尾下標]
這裏的下標,就是指的某個字符在字符串中對應的索引值。支持雙向索引。我們還是以“hello,world!”這個字符串爲例,其索引如下圖所示:
正向索引,從0開始,往後遞增;反向索引,從-1開始,往前遞減。我們只需要明確要截取的子串對應的開始索引和結束索引,即可將其截取出來。
這裏需要注意一點,python的截取語法,是“前閉後開”的。其截取的子串包含“頭下標”對應的字符,但是卻不包含“尾下標”對應的字符。這點需要特別注意,容易出錯。
比如,我們要截取“hello”這個子串。[0:5]、[0:-7]、[-12:5]、[-12:-7],這幾種方式可以達到相同的效果。
下面列出了一些使用的例子,大家可以參考:
# 字符串截取
str3 = 'hello, world!'
sub_str1 = str3[0:5] # 截取hello
sub_str2 = str3[-6:-1] # 截取world
print(sub_str1)
print(sub_str2)
print(str3[5]) # 輸出第6個字符
print(str3[:5]) # 輸出第6個字符之前的所有字符
print(str3[5:]) # 輸出第6個字符及以後的所有字符
print(str3[-5:]) # 輸出倒數第5個字符及以後的所有字符
03
—
分割
有時候我們需要對一個字符串依照某種規則進行分割,得到若干個子串。比如,我們以逗號爲分割標識,將“hello,world!”分割爲兩個子串“hello”和“world!”。
Python提供了split方法實現字符串分割功能,其語法爲:
變量.split("分割標示符號"[分割次數])
# 字符串分割 split
sub_str_list =str3.split(',')
print(sub_str_list)
輸出爲:
['hello', ' world!']
Split會返回一個列表結構,這個結構裏面存儲了分割之後的所有子串。如果找不到分割標識符號,則返回的列表中只有一個元素,就是原始字符串。
看下面的例子,我們指定分割次數後會怎麼樣:
# 字符串分割 split
sub_str_list =str3.split(',')
print(str3.split('o'))
print(str3.split('o', 1))
輸出爲:
['hell', ', w', 'rld!']
['hell', ', world!']
如果我們不指定分割次數,會分割爲3個子串。如果我們指定只分割1次,則被分割成了2個子串。
Split只能滿足一些簡單固定的分割規則,對於比較複雜的規則,我們可以採用正則表達式,它的功能就非常強大了。後面我們會專門拿一個章節來講解正則表達式,這裏不展開了。
04
—
連接
我們通常使用下面兩種方式來實現字符串的連接:
1、通過加號+實現
2、通過join方法實現
語法: str.join(sequence)
sequence -- 要連接的元素序列,可以是元組或者列表。
str1.join([s1,s2, s3])
它的連接結果是:
s1-str1-s2-str1-s3
如下實例所示:
# 字符串連接
str3=’ hello, world!’
str4 = ' I am Tiger.'
print(str3 + str4 + " Glad to see you ! ")
print(''.join([str3,str4, " Glad to see you ! "]))
print('**'.join(["aa","bb", "cc"])) #aa**bb**cc
輸出爲:
hello, world! I am Tiger. Glad to see you !
hello, world! I am Tiger. Glad to see you !
aa**bb**cc
這兩種方法實現的效果是一樣的,但是他們的實現邏輯卻有很大的區別。基於效率的考慮,如果連接的字符串超過2個,建議儘量採用join方法。
加號連接字符串,每連接一個字符串時,系統會分配一次內存,如果連接N個字符串,那麼需要分配N-1次內存,性能消耗較大。
而join方法,則是在一開始會計算列表中所有字符串的總長度並一次分配好內存,所以它的性能會高一些。
下一節我們繼續講string的操作方法。
本節課程的視頻和實例源碼下載方式:點擊->我的主頁,查看個人簡介。
我儘量堅持每日更新一節。