str()實現(xiàn)數(shù)字轉(zhuǎn)型字符串
str()可以幫助我們將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串裙秋。例如:
str(5.20) ==> ‘5.20’ str(3.14e2)==>’314.0’ str(True) ==> ‘True’
當我們調(diào)用 print()函數(shù)時,解釋器自動調(diào)用了 str()將非字符串的對象轉(zhuǎn)成了字符串。
使用[]提取字符
字符串的本質(zhì)就是字符序列,我們可以通過在字符串后面添加[],在[]里面指定偏移量,可以提取該位置的單個字符。
正向搜索:
最左側(cè)第一個字符矮慕,偏移量是 0,第二個偏移量是 1啄骇,以此類推痴鳄。直到 len(str)-1為止。
反向搜索:
最右側(cè)第一個字符缸夹,偏移量是-1夏跷,倒數(shù)第二個偏移量是-2,以此類推明未,直到-len(str)為止槽华。
【操作】使用[]提取字符串中的字符
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
'a'
>>> a[3]
'd'
>>> a[26-1]
'z'
>>> a[-1]
'z'
>>> a[-26]
'a'
>>> a[-30]
Traceback (most recent call last):
File "<pyshell#91>", line 1, in <module>
a[-30]
IndexError: string index out of range
replace()實現(xiàn)字符串替換
字符串是“不可改變”的,我們通過[]可以獲取字符串指定位置的字符趟妥,但是我們不能改變
字符串猫态。我們嘗試改變字符串中某個字符,發(fā)現(xiàn)報錯了:
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[3]='高'
Traceback (most recent call last):
File "<pyshell#94>", line 1, in <module>
a[3]='高'
TypeError: 'str' object does not support item assignment
字符串不可改變披摄。但是亲雪,我們確實有時候需要替換某些字符。這時疚膊,只能通過創(chuàng)建新的字符串來實現(xiàn)义辕。
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
'ab 高 defghijklmnopqrstuvwxyz'
整個過程中,實際上我們是創(chuàng)建了新的字符串對象寓盗,并指向了變量 a灌砖,而不是修改了以前的字符串。 內(nèi)存圖如下:
字符串切片 slice 操作
切片 slice 操作可以讓我們快速的提取子字符串傀蚌。標準格式為:
[起始偏移量 start:終止偏移量 end:步長 step]
典型操作(三個量為正數(shù)的情況)如下:
其他操作(三個量為負數(shù))的情況:
切片操作時基显,起始偏移量和終止偏移量不在[0,字符串長度-1]這個范圍,也不會報錯善炫。起始
偏移量小于 0 則會當做 0撩幽,終止偏移量大于“長度-1”會被當成-1。例如:
>>> "abcdefg"[3:50]
'defg'
我們發(fā)現(xiàn)正常輸出了結(jié)果箩艺,沒有報錯窜醉。
【操作】
- 將”to be or not to be”字符串倒序輸出
>>> "to be or not to be"[::-1]
'eb ot ton ro eb ot'
- 將”gcsgcsgcsgcsgcs”字符串中所有的 s 輸出
>>> "gcsgcsgcsgcsgcs"[2:-1:3]
'ssss'
split()分割和 join()合并
split()可以基于指定分隔符將字符串分隔成多個子字符串(存儲到列表中)宪萄。如果不指定分隔
符,則默認使用空白字符(換行符/空格/制表符)榨惰。示例代碼如下:
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
join()的作用和 split()作用剛好相反拜英,用于將一系列子字符串連接起來。示例代碼如下:
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
拼接字符串要點:
使用字符串拼接符+读串,會生成新的字符串對象聊记,因此不推薦使用+來拼接字符串撒妈。推薦
使用 join 函數(shù)恢暖,因為 join 函數(shù)在拼接字符串之前會計算所有字符串的長度,然后逐一拷貝狰右,
僅新建一次對象杰捂。
【操作】測試+拼接符和 join(),不同的效率 (demo004.py)
import time
time01 = time.time() #起始時刻
a = ""
for i in range(1000000):
a += "gcs"
time02 = time.time() #終止時刻
print("運算時間:"+str(time02-time01))
time03 = time.time() #起始時刻
li = []
for i in range(1000000):
li.append("gcs")
a = "".join(li)
time04 = time.time() #終止時刻
print("運算時間:"+str(time04-time03))
即:+效率大于join()
字符串駐留機制和字符串比較
字符串駐留:僅保存一份相同且不可變字符串的方法棋蚌,不同的值被存放在字符串駐留池中嫁佳。
Python 支持字符串駐留機制,對于符合標識符規(guī)則的字符串(僅包含下劃線(_)谷暮、字母
和數(shù)字)會啟用字符串駐留機制駐留機制蒿往。
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
字符串比較和同一性
我們可以直接使用==,!=對字符串進行比較,是否含有相同的字符湿弦。
我們使用 is / not is瓤漏,判斷兩個對象是否同一個對象。比較的是對象的地址颊埃,即 id(obj1)是否和 id(obj2)相等蔬充。
成員操作符
in /not in 關(guān)鍵字,判斷某個字符(子字符串)是否存在于字符串中班利。