一、定義:由一對單引號或雙引號包含的一串字元。字串是不可變型別,字串之間可以進行加法、乘法的運算,運算的本質就是字串拼接。
name="marsha" age="49" print(name+age) print(name*3) marsha49 namenamename
二、資料型別轉換:str() 可以將任意資料型別轉換成字串型別。
#list>str a=[1,2,3] #list a=sir([1,2,3]) #str #dict>str a=str({"name":"marsha","age"=49}) #str #int>str x=str(57) #str #float>str y=str(3.1415) #tuple>str m=str((1,2,3)) #set>str L=str({1,2,3})
三、內建方法
A、取值:字串可以按索引取值,可以取全值,可以部分取值;注意:取值不算空格;且,只能取,不能改 ;正向取從0開始數,反向取從-1開始數。
語法格式: [ ]
msg="hello world" print(msg) #取全值 print(msg[5]) #正向取 print(msg[-3]) #反向取 hello world w r
B、切片Slice:是一個取操作,不改變原值,屬於淺拷貝,即:從一個大字串中拷貝出一個字串,正切從0開始數位,空格要算位,切片顧頭不顧尾。 完整切片語法格式:object[start_index:end_index:step]。
step:正負數均可,其絕對值大小決定了切取資料時的‘‘步長”,而正負號決定了“切取方向”,正表示“從左往右”取值,負表示“從右往左”取值。當step省略時,預設為1,即從左往右以步長1取值。
start_index:表示起始索引(包含該索引對應值);該引數省略時,表示從物件“端點”開始取值,至於是從“起點”還是從“終點”開始,則由step引數的正負決定,step為正從“起點”開始,為負從“終點”開始。
end_index:表示終止索引(不包含該索引對應值);該引數省略時,表示一直取到資料“端點”,至於是到“起點”還是到“終點”,同樣由step引數的正負決定,step為正時直到“終點”,為負時直到“起點”。
總結:
-
開頭:當步長>0時,不寫預設0。當步長<0時,不寫預設-1
-
結束:當步長>0時,不寫預設列表長度加一。當步長<0時,不寫預設負的列表長度減一
-
步長:預設1,>0 是從左往右走,<0是從右往左走
(一)start_index、end_index、step三者可同為正、同為負,或正負混合。但必須遵循一個原則,即:當start_index表示的實際位置在end_index的左邊時,從左往右取值,此時step必須是正數(同樣表示從左往右);當start_index表示的實際位置在end_index的右邊時,表示從右往左取值,此時step必須是負數(同樣表示從右往左),即兩者的取值順序必須相同。
(二)當start_index或end_index省略時,取值的起始索引和終止索引由step的正負來決定,這種情況不會有取值方向矛盾,但正和負取到的結果順序是相反的,因為一個向左一個向右。
(三)step的正負是必須要考慮的,尤其是當step省略時。比如msg[-1:],很容易就誤認為是從“終點”開始一直取到“起點”,原因在於step省略時step=1表示從左往右取值,而起始索引start_index=-1本身就是物件的最右邊元素了,再往右已經沒資料了,因此結果只含有d一個元素。
(四)切片的返回結果型別和切片物件型別一致,返回的是切片物件的子序列。如:對一個列表切片返回一個列表;字串切片返回字串。
切片可以全切,正切,反切,還可以加步長切片。全切用[:],[: :]操作,反向全切用[::-1]操作。
msg="hell0 world" print(msg[:]) #正向全切 print(msg[::-1]) #反向全切 print(msg[0:8]) #正向切,從第一位切到第7位,即0,1,2,3,4,5,6,7 print(msg[0:8:2]) #正向切,步長為2,從第一位開始,兩位兩位的數,即0,2,4,6,注意,8不能數了,顧頭不顧尾 print(msg[5:0:-1]) #反向切,步長位1,起點為5,終點為0,即5,4,3,2,1,0 #輸出結果 hello world dlrow olleh hello wo hlow olleh
C、長度len:獲取字串的長度,即字串的個數,起始位置為1。但凡存在於引號內的都算作字元,含空格
msg="hello world!" print(len(msg)) >>>12
D、成員運算in 和not in:返回布林值True 或False
msg="hello world" print(‘hello’ in msg) print(“hello” not in msg) >>> True False
E、移除字串首尾的空白字元:strip( ) #空白字元如:空格,\ n ,\ t;
移除首尾指定字元: strip (指定字元),如strip(*&$@)
移除左邊的字元:lstrip( )
移除右邊的字元:rstrip( )
msg=“ hello world \n ” res="**&hello world%" print(msg.strip()) print(res.strip(*$%))
print(res.lstrip(*&)) >>> hello world hello world
hello world%
F、切分:把一個字串按照某種分隔符號進行切割,得到一個新的列表.
split():從左到右切分,預設以空格作為切分符號;
split('指定符號'):從左到右,按照指定的字元切割字串;切分可以指定次數,如split(' : ' , 1)
rsplit():從右到左的順序對字串進行切分;
rsplit( '指定符號’ ):從右到左切分,按照指定的字元切割字串。
info="my name is marsha" msg="marsha:49:max" print(info.split()) print(msg.split(':',1)) >>> ['my'', 'name', 'is','marsha'] ['marsha','49:max']
G、用 for in 迴圈取出字元中的每一個字元,含符號和空格
info='marsha:49' for x in info print(x) >>> m a r s h a : 4 9
H、字串改寫:lower( )全改小寫;upper( )全改大寫
msg='MaRsHa' print(msg.lower()) print(msg.upper()) >>> marsha MARSHA
I、判斷字串是否以括號內指定的字元開頭:startswith(' '),結果返回布林值;
判斷字串是否以括號內指定的字元結尾:endswith (' ') 結果返回布林值。
msg='my name is marsha' print(msg.startswith('m')) print(msg.engswith('i')) >>> True False
J、格式化輸出:format
a:按照位置一一對應傳值:%s可以接收任意值, %d可以接收傳的數字
info='my name in %s my age is %d' %('marsha','49') print(info) >>> 'my name is marsha my age is 49'
b:按照位置,用空的{}一一對應傳值:{}.format(按中括號個數傳值
info='my name is {} my age is {}'.format('marsha',49) print(info) >>> 'my name is marsha my age is 49'
c:不依賴位置傳值:{變數名} .format(變數賦值)
info='my name is {name}{name} my age is {age}'.format(age=49,name='marsha') print(info) >>> 'my name is marsha marsha my age is 49'
d:把format傳入的多個值當作一個列表,然後按照 {索引}取值
info='my name is {1} my age is {0}'.format('marsha',49) print(info) >>> 'my name is 49 my age is marsha'
K、' 指定分隔符 ’ . join( ):是從可迭代物件中取出多個字串,然後按照指定的分隔符進行拼接,拼接的結果為字串。它的使用與split( )相反
res='hello' print('%'.join(res) >>> 'h%e%l%l%o'
L、變數名.replace( ) :修改字串中舊的字元,可以指定修改個數.
msg='my name is marsha,my age is 49' print(msg.replace('49','20')) print(msg.replace('my','your',1)) >>> 'my name is marsha, my age is 20' 'your name is marsha,my age is 49'
M、判斷字串是否為純數字組成用 isdigit()返回布林值
msg='ab3456' print(msg.isdigit( )) >>> False
N、字串需要了解的其他操作(略)