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