字符串是Python中最受歡迎、最常使用的數(shù)據(jù)類型。可以通過用引號括起字符來創(chuàng)建它們。 Python將單引號與雙引號相同。創(chuàng)建字符串和向一個變量賦值一樣簡單。 例如 -
var1 = 'Hello World!'
var2 = "Python Programming"
Python不支持字符類型; 字符會被視為長度為1的字符串,因此也被認(rèn)為是一個子字符串。要訪問子串,請使用方括號的切片加上索引或直接使用索引來獲取子字符串。 例如 -
#!/usr/bin/python3
var1 = 'Hello World!'
var2 = "Python Programming"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5]) # 切片加索引
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -
var1[0]: H
var2[1:5]: ytho
可以通過將變量分配給另一個字符串來“更新”現(xiàn)有的字符串。 新值可以與其原值相關(guān)或完全不同的字符串。 例如 -
#!/usr/bin/python3
var1 = 'Hello World!'
print ("Updated String :- ", var1[:6] + 'Python')
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -
Updated String :- Hello Python
下表是可以用反斜杠表示法表示轉(zhuǎn)義或不可打印字符的列表。單引號以及雙引號字符串的轉(zhuǎn)義字符被解析。
| 反斜線符號 | 十六進(jìn)制字符 | 描述/說明 |
|---|---|---|
\a |
0x07 |
鈴聲或警報 |
\b |
0x08 |
退格 |
\cx |
Control-x | |
\C-x |
Control-x | |
\e |
0x1b |
Escape |
\f |
0x0c |
換頁 |
\M-\C-x |
Meta-Control-x | |
\n |
0x0a |
新一行 |
\nnn |
八進(jìn)制符號,其中n在0.7范圍內(nèi) |
|
\r |
0x0d |
回車返回 |
\s |
0x20 |
空格 |
\t |
0x09 |
制表符 |
\v |
0x0b |
垂直制表符 |
\x |
字符x |
|
\xnn |
十六進(jìn)制符號,其中n在0~9,a~f或A~F范圍內(nèi) |
假設(shè)字符串變量a保存字符串值’Hello‘,變量b保存字符串值’Python‘,那么 -
| 運(yùn)算符 | 說明 | 示例 |
|---|---|---|
+ |
連接 - 將運(yùn)算符的兩邊的值添加 | a + b 結(jié)果為 HelloPython |
* |
重復(fù) - 創(chuàng)建新字符串,連接相同字符串的多個副本 | a*2 結(jié)果為 HelloHello |
[] |
切片 - 給出指定索引中的字符串值,它是原字符串的子串。 | a[1] 結(jié)果為 e |
[:] |
范圍切片 - 給出給定范圍內(nèi)的子字符串 | a[1:4] 結(jié)果為 ell |
in |
成員關(guān)系 - 如果給定字符串中存在指定的字符,則返回true |
'H' in a 結(jié)果為 1 |
not in |
成員關(guān)系 - 如果給定字符串中不存在指定的字符,則返回true |
'Y' not in a 結(jié)果為 1 |
r/R |
原始字符串 - 抑制轉(zhuǎn)義字符的實(shí)際含義。原始字符串的語法與正常字符串的格式完全相同,除了原始字符串運(yùn)算符在引號之前加上字母“r”。 “r”可以是小寫(r)或大寫(R),并且必須緊靠在第一個引號之前。 |
print(r'\n') 將打印 \n ,或者 print(R'\n') 將打印 \n,要注意的是如果不加r或R作為前綴,打印的結(jié)果就是一個換行。 |
% |
格式 - 執(zhí)行字符串格式化 | 請參見本文第5節(jié) |
Python最酷的功能之一是字符串格式運(yùn)算符%。 這個操作符對于字符串是獨(dú)一無二的,彌補(bǔ)了C語言中 printf()系列函數(shù)。 以下是一個簡單的例子 -
#!/usr/bin/python3
print ("My name is %s and weight is %d kg!" % ('Maxsu', 71))
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -
My name is Maxsu and weight is 71 kg!
以下是可以與%符號一起使用的完整符號集列表 -
| 編號 | 格式化符號 | 轉(zhuǎn)換 |
|---|---|---|
| 1 | %c |
字符 |
| 2 | %s |
在格式化之前通過str()函數(shù)轉(zhuǎn)換字符串 |
| 3 | %i |
帶符號的十進(jìn)制整數(shù) |
| 4 | %d |
帶符號的十進(jìn)制整數(shù) |
| 5 | %u |
無符號十進(jìn)制整數(shù) |
| 6 | %o |
八進(jìn)制整數(shù) |
| 7 | %x |
十六進(jìn)制整數(shù)(小寫字母) |
| 8 | %X |
十六進(jìn)制整數(shù)(大寫字母) |
| 9 | %e |
指數(shù)符號(小寫字母’e‘) |
| 10 | %E |
指數(shù)符號(大寫字母’E‘ |
| 11 | %f |
浮點(diǎn)實(shí)數(shù) |
| 12 | %g |
%f和%e |
| 13 | %G |
%f和%E |
其他支持的符號和功能如下表所列 -
| 編號 | 符號 | 功能 |
|---|---|---|
| 1 | * |
參數(shù)指定寬度或精度 |
| 2 | - |
左對齊 |
| 3 | + |
顯示標(biāo)志或符號 |
| 4 | <sp> |
在正數(shù)之前留空格 |
| 5 | # |
根據(jù)是否使用“x”或“X”,添加八進(jìn)制前導(dǎo)零(‘0‘)或十六進(jìn)制前導(dǎo)’0x‘或’0X‘。 |
| 6 | 0 |
使用零作為左邊墊符(而不是空格) |
| 7 | % |
‘%%‘留下一個文字“%” |
| 8 | (var) |
映射變量(字典參數(shù)) |
| 9 | m.n. |
m是最小總寬度,n是小數(shù)點(diǎn)后顯示的位數(shù)(如果應(yīng)用) |
Python中的三重引號允許字符串跨越多行,包括逐字記錄的新一行,TAB和任何其他特殊字符。
三重引號的語法由三個連續(xù)的單引號或雙引號組成。
#!/usr/bin/python3
para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print (para_str)
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果。注意每個單獨(dú)的特殊字符如何被轉(zhuǎn)換成其打印形式,它是直到最后一個NEWLINEs在“up”之間的字符串的末尾,并關(guān)閉三重引號。 另請注意,NEWLINEs可能會在一行或其轉(zhuǎn)義碼(\n)的末尾顯式顯示回車符 -
this is a long string that is made up of
several lines and non-printable characters such as
TAB ( ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.
原始字符串根本不將反斜杠視為特殊字符。放入原始字符串的每個字符都保持所寫的方式 -
#!/usr/bin/python3
print ('C:\\nowhere')
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -
C:\nowhere
現(xiàn)在演示如何使用原始的字符串。將表達(dá)式修改為如下 -
#!/usr/bin/python3
print (r'C:\\nowhere')
當(dāng)執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -
C:\\nowhere
在Python 3中,所有的字符串都用Unicode表示。在Python 2內(nèi)部存儲為8位ASCII,因此需要附加’u‘使其成為Unicode,而現(xiàn)在不再需要了。
內(nèi)置字符串方法
Python包括以下內(nèi)置方法來操作字符串 -
| 編號 | 方法 | 說明 |
|---|---|---|
| 1 | capitalize() | 把字符串的第一個字母轉(zhuǎn)為大寫 |
| 2 | center(width, fillchar) | 返回使用fillchar填充的字符串,原始字符串以總共width列為中心。 |
| 3 | count(str, beg = 0,end = len(string)) | 計算字符串中出現(xiàn)有多少次str或字符串的子字符串(如果開始索引beg和結(jié)束索引end,則在beg~end范圍匹配)。 |
| 4 | decode(encoding = ‘UTF-8’,errors = ‘strict’) | 使用編碼encoding解碼該字符串。 編碼默認(rèn)為默認(rèn)字符串encoding。 |
| 5 | encode(encoding = ‘UTF-8’,errors = ‘strict’) | 返回字符串的編碼字符串版本; 在錯誤的情況下,默認(rèn)是拋出ValueError,除非使用’ignore‘或’replace‘給出錯誤。 |
| 6 | endswith(suffix, beg = 0, end = len(string)) | 確定字符串或字符串的子字符串(如果啟動索引結(jié)束和結(jié)束索引結(jié)束)都以后綴結(jié)尾; 如果是則返回true,否則返回false。 |
| 7 | expandtabs(tabsize = 8) | 將字符串中的制表符擴(kuò)展到多個空格; 如果沒有提供tabize,則默認(rèn)為每個制表符為8個空格。 |
| 8 | find(str, beg = 0 end = len(string)) | 如果索引beg和結(jié)束索引end給定,則確定str是否在字符串或字符串的子字符串中,如果找到則返回索引,否則為-1。 |
| 9 | index(str, beg = 0, end = len(string)) | 與find()相同,但如果沒有找到str,則引發(fā)異常。 |
| 10 | isalnum() | 如果字符串至少包含1個字符,并且所有字符均為數(shù)字,則返回true,否則返回false。 |
| 11 | isalpha() | 如果字符串至少包含1個字符,并且所有字符均為字母,則返回true,否則返回false。 |
| 12 | isdigit() | 如果字符串只包含數(shù)字則返回true,否則返回false。 |
| 13 | islower() | 如果字符串至少包含1個字母,并且所有字符均為小寫,則返回true,否則返回false。 |
| 14 | isnumeric() | 如果unicode字符串只包含數(shù)字字符,則返回true,否則返回false。 |
| 15 | isspace() | 如果字符串只包含空格字符,則返回true,否則返回false。 |
| 16 | istitle() | 如果字符串正確“標(biāo)題大小寫”,則返回true,否則返回false。 |
| 17 | isupper() | 如果字符串至少包含一個可變大小寫字符,并且所有可變大小寫字符均為大寫,則返回true,否則返回false。 |
| 18 | join(seq) | 將序列seq中的元素以字符串表示合并(并入)到具有分隔符字符串的字符串中。 |
| 19 | len(string) | 返回字符串的長度 |
| 20 | ljust(width[, fillchar]) | 返回一個空格填充的字符串,原始字符串左對齊到總共width列。 |
| 21 | lower() | 將字符串中的所有大寫字母轉(zhuǎn)換為小寫。 |
| 22 | lstrip() | 刪除字符串中的所有前導(dǎo)空格 |
| 23 | maketrans() | 返回在translate函數(shù)中使用的轉(zhuǎn)換表。 |
| 24 | max(str) | 從字符串str返回最大字母字符。 |
| 27 | replace(old, new [, max]) | 如果給定max值,則用new或最多最大出現(xiàn)替換字符串中所有出現(xiàn)的舊字符(old)。 |
| 28 | rindex( str, beg = 0, end = len(string)) | 與index()相同,但在字符串中向后搜索。 |
| 29 | rjust(width,[, fillchar]) | 返回一個空格填充字符串,原始字符串右對齊到總共寬度(width)列。 |
| 30 | rstrip() | 刪除字符串的所有尾隨空格。 |
| 31 | split(str= | 根據(jù)分隔符str(空格,如果沒有提供)拆分字符串并返回子字符串列表; 如果給定,最多分割為num子串。 |
| 32 | splitlines( num=string.count(‘\n’)))”) | 全部拆分字符串(或num)新行符,并返回每行的列表,并刪除新行符。 |
| 33 | startswith(str, beg=0,end=len(string)) | 確定字符串或字符串的子字符串(如果給定起始索引beg和結(jié)束索引end)以str開頭; 如果是則返回true,否則返回false。 |
| 34 | strip([chars]) | 對字符串執(zhí)行lstrip()和rstrip() |
| 35 | swapcase() | 反轉(zhuǎn)在字符串中的所有字母大小寫,即小寫轉(zhuǎn)大寫,大寫轉(zhuǎn)小寫。 |
| 36 | title() | 返回字符串的標(biāo)題版本,即所有單詞第一個字母都以大寫開頭,其余的都是小寫的。 |
| 37 | translate(table, deletechars= | 根據(jù)轉(zhuǎn)換表STR(256個字符),除去那些在del字符串轉(zhuǎn)換字符串。 |
| 38 | upper() | 將字符串中的小寫字母轉(zhuǎn)換為大寫。 |
| 39 | zfill(width) | 返回原始字符串,左邊填充為零,總共有寬度(width)字符; 對于數(shù)字zfill()保留給定的任何符號(少于一個零)。 |
| 40 | isdecimal() | 如果unicode字符串只包含十進(jìn)制字符,則返回true,否則返回false。 |