Python中的字串同樣適用標準的序列操作(索引,分片,乘法,成員判斷,求長度,取最小值和最大值),但因為字串是不可變的,因此字串不支援分片賦值。
1 s=`http://www.baidu.com` 2 s[-3:]=`aaa` 3 print(s)
輸出結果:
1 s[-3:]=`aaa` 2 TypeError: `str` object does not support item assignment
可以看出丟擲的錯誤資訊,字串不允許標記內部項。
但我們可以在字串中用一個百分比符號%s標記出一個佔位符,它表示我們將要在該位置插入轉換值的位置。s將會被格式化為字串,如果被轉換的物件不是字串,則會將其轉換為字串。
模板字串
除了用%s插入轉換值外,還可以使用substitute模板方法,用傳遞進來的關鍵字引數替換字串中的關鍵字。
1 from string import Template 2 s=Template(`$x,glorious $b`) 3 s=s.substitute(x=`slurm`,b=`haha`) 4 print(s)
輸出結果:
slurm,glorious haha
我們看到$s位置被替換為slurm,$b位置被替換為haha
如果被替換的位置是單詞的一部分,可以將其用{}括起來
1 from string import Template 2 s=Template(`${x}glorious $b`) 3 s=s.substitute(x=`slurm`,b=`haha`) 4 print
輸出結果:
slurmglorious haha
使用字典變數提供值得/名稱對替換
1 from string import Template 2 s=Template(`$name come from $county `) 3 d={} 4 d[`name`]=`zhangsan` 5 d[`county`]=`china` 6 s=s.substitute(d) 7 print(s)
輸出結果:
zhangsan come from china
格式化輸出多個引數
1 s=`%s come from %s`%(`zhangsan`,`china`) 2 print(s)
輸出結果:
1 zhangsan come from china
字串格式化轉換型別
轉換型別 | 解釋 |
d,i | 帶符號的十進位制整數 |
o | 不帶符號的八進位制 |
u | 不帶符號的十進位制 |
x | 不帶符號的十六進位制 |
e | 科學計數法表示的浮點數(小寫) |
E | 科學計數法表示浮點數(大寫) |
f.F | 十進位制浮點數 |
c | 單字元 |
r | 字串(用repr轉換任意Python物件) |
s | 字串(用str轉換任意python物件) |
字串與utf8互轉
1 s=`你好` 2 print(s.encode(`utf8`)) 3 a=s.encode(`utf8`) 4 print(a.decode(`utf8`))
輸出結果:
1 b`xe4xbdxa0xe5xa5xbd` 2 你好
字串的寬度和精度
寬度是指轉換後的值所保留的最小字元個數,精度則是結果中應該包含的小數位數
例如 輸出寬度為10的pi的值
1 from math import pi 2 p=`%10f`%pi 3 for k, i in enumerate(p) : #使用enumerate函式列印序列 4 print(`序列%s`%k,i)
1 序列0 2 序列1 3 序列2 3 4 序列3 . 5 序列4 1 6 序列5 4 7 序列6 1 8 序列7 5 9 序列8 9 10 序列9 3
列印精度為2的pi的值
1 from math import pi 2 p=`%.2f`%pi 3 print(p)
輸出結果:
3.14
列印寬度為10,精度為2的pi的值
1 from math import pi 2 p=`%10.2f`%pi 3 for k,i in enumerate(p): 4 print(`序列%s 列印值%s`%(k,i))
列印結果:
1 序列0 列印值 2 序列1 列印值 3 序列2 列印值 4 序列3 列印值 5 序列4 列印值 6 序列5 列印值 7 序列6 列印值3 8 序列7 列印值. 9 序列8 列印值1 10 序列9 列印值4
我們看到,當整數部分沒有值時,將以空` ` 代替。
1 print(`%+5d`%10) 2 print(`%+5d`%-10)
輸出:
1 +10 2 -10
使用 `-`用來左對齊數值,用`+`表示不管是整數還是複數都會標識出符號
使用字串格式化,使我們的程式碼看著更簡潔
1 width=input(`>>輸入寬度:`) 2 price_with=10 3 item_width=int(width)-price_with 4 header_format=`%-*s%*s` 5 format=`%-*s%*.2f` 6 print(`=`*int(width)) 7 print(header_format%(item_width,`item`,price_with,`price`)) 8 print(`_`*int(width)) 9 print(format%(item_width,`apple`,price_with,0.4)) 10 print(format%(item_width,`Pears`,price_with,0.5))
輸出結果:
>>輸入寬度:30
==============================
item price
______________________________
apple 0.40
Pears 0.50
字串的常用方法:
方法名 | 解釋 | 案例 |
find | 在一個長的字串中查詢字串,返回字串所在位置的最左端的索引,如果沒有則返回-1 |
str=`hello world` |
join | 用來連線列表中的字串 |
l=[`1`,`2`,`3`,`4`,`5`,`6`] |
lower | 返回字串的小寫母版(忽略使用者大小寫時使用,例如,使用者輸入使用者名稱含有大寫字母,輸入後將其轉換為小寫並與資料庫中的儲存字元匹配) |
str=`HELLO WORLD` |
replace | 返回字串中所有被匹配項被替換後的所得到的新字串 |
str=`HELLO WORLD` |
split | 按某個分隔符將字串分割成序列,預設以空格符分割 |
str=`1+2+3+4`
|
strip | 去除字串兩邊的空格 |
str=` HELLO WORLD ` |
maketrans | 建立字元對映的轉換表,接收兩個引數,第一個引數是字串,表示要轉換的字串,第二個引數也是字串表示轉換的目標(兩個引數是對映關係(一一對映),因此長度必須相同) |
intab = "el" |