Python字串及用法詳解

2020-07-16 10:05:23
字串是由數位、字母、下畫線組成的一串字元,在程式語言中表示文字的資料型別。在 Python 2.X 中,普通字串是以 8 位 ASCII 碼進行儲存的,而 Unicode 字串則以 16 位 Unicode 編碼儲存,這樣能夠表示更多的字元集,使用時需要在字串前面加上字首 u。在 Python 3.X 中所有的字串都使用 Unicode 編碼儲存。

宣告字串可以使用單引號'或雙引號",Python 中典型的字串賦值語句如下:

str='你好,Python'


Python 不支援單字元型別,單字元在 Python 中也是作為一個字串使用的。要獲取字串中的一部分,可以使用中括號[ ]來擷取字串,例如:

string='Hello world'
print(string[0:5])

上述程式碼的執行結果如下所示:

>>> string='Hello world'
>>> print(string[0:5])
Hello


字串支援擷取、連線、重複輸出等操作,Python 中字串支援的操作運算子如表 1 所示。

表 1:Python 中字串支援的操作運算子
運算子 描述
+ 字串連線,例如 Hello+world 輸出 Helloworld
* 重複輸出字串,例如 Hello*2 輸出HelloHello
[] 通過下標獲取字串中的單個字元
[ : ] 獲取字串的一部分,遵循左閉右開原則,例如 str[0:2] 不包含第 3 個字元
In 成員運算子,如果字串中包含給定的字元則返回 True
not in 成員運算子,如果字串中不包含給定的字元則返回 True
r/R 原始字串,所有的字串都直接按照字面的意思來使用
% 格式化字串

在字串中使用特殊字元需要用到跳脫字元,Python 使用反斜槓“”對字元進行跳脫。Python 中用於跳脫的字元如表 2 所示。

表 2:Python 中用於跳脫的字元
跳脫字元 描述
在行尾用作續行符
反斜槓符號
' 單引號
" 雙引號
a 響鈴
b 退格(刪除)
e 跳脫
00
n 換行
v 縱向製表符
t 橫向製表符
r 回車
f 換頁
oyy 八進位制數,yy代表的字元,例如:o12代表換行
xyy 十六進位制數,yy代表的字元,例如:x0a代表換行
other 其他的字元以普通格式輸出

Python支援格式化輸出字串,目的是將需要輸出的字串按照預先設定的格式顯示。例如:

print("%s今年%d歲了!" %('小明', 10))

上述程式碼的執行結果如下所示:

>>> print("%s今年%d歲了!" %('小明', 10))
小明今年10歲了


Python 中用於格式化輸出字串的符號共有 13 個,如表 3 所示。

表 3:Python 中用於格式化輸出字串的符號
符號 描述
%c 格式化字元及其ASCII碼
%s 格式化字串
%d 格式化整數
%u 格式化無符號整數
%o 格式化無符號八進位制數
%x 格式化無符號十六進位制數
%X 格式化無符號十六進位制數(大寫)
%f 格式化浮點數位,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 作用同%e,用科學計數法格式化浮點數
%g %f 和 %e 的簡寫
%G %f 和 %E 的簡寫
%p 用十六進位制數格式化變數的地址

與 PHP 語言類似,Python 也提供了很多字串相關操作的函數,常用的字串函數如表 4 所示。

表 4:Python 常用的字串函數
函數 描述
title() 返回將原字串中單詞首字母大寫的新字串
istitle 判斷字串中的單詞首字母是否大寫
capitalize() 返回將整個字串的首字母大寫的新字串
lower()、upper() 返回字串的小寫、大寫後的新字串

(續表)
函數 描述
swapcase() 返回字串的大小寫互換後的新字串
islower()、isupper() 判斷字串是否全部為小寫、大寫
strip()、lstrip()、rstrip() 刪除字串首尾、左部或右部的空白,空白包括空格、製表符、換行符等
ljust()、rjust()、center() 列印指定數目的字元,若字串本身長度不足,則在其左部、右部或者兩端用指定的字元補齊
startswith()、endswith() 判斷原字串是否以指定的字串開始或結束
isnumeric()、isdigit()、isdecimal() 判斷字串是否為數位、整數、十進位制數位
find()、rfind() 在字串中查詢指定字串第一次出現的位置,方向分別為從左和從右
split() 按照指定的字元將字串分割成詞,並返回列表
splitlines() 按照換行符將文字分割成行
count() 統計指定字串在整個字串中出現的次數
format() 用指定的引數格式化原字串中的預留位置

上述字串函數的範例程式碼如下:

msg="this is a test STRING.n"
msg.title()
msg.capitalize()
msg.istitle()
msg.title().istitle()
msg.lower()
msg.upper()
msg.swapcase()
msg.islower()
msg.isupper()
msg.strip()
msg.lstrip()
msg.rstrip()
msg.ljust(20, '=')
msg.rjust(20, '=')
msg.center(20,  '=')
msg.startswith('th')
msg.endswith('ING.')
'111'.isnumeric()
'111'.isdigit()
'111'.isdecimal()
msg.find('is')
msg.rfind('is')
msg.split(' ')
msg.count('t')

上述程式碼的執行結果如下所示:

'This is a test string.n'
>>> msg.title()
'This Is A Test String.n'
>>> msg.capitalize()
'This is a test string.n'
>>> msg.istitle()
False
>>> msg.title().istitle()
True
>>> msg.lower()
'this is a test string.n'
>>> msg.upper()
'THIS IS A TEST STRING.n'
>>> msg.swapcase()
'THIS IS A TEST string.n'
>>> msg.islower()
False
>>> msg.isupper()
False
>>> msg.strip()
'this is a test STRING.'
>>> msg.lstrip()
'this is a test STRING.n'
>>> msg.rstrip()
'this is a test STRING.'
>>> msg.ljust(20, '=')
'this is a test STRING.n'
>>> msg.rjust(20, '=')
'this is a test STRING.n'
>>> msg.center(20,  '=')
'this is a test STRING.n'
>>> msg.startswith('th')
True
>>> msg.endswith('ING.')
False
>>> '111'.isnumeric()
True
>>> '111'.isdigit()
True
>>> '111'.isdecimal()
True
>>> msg.find('is')
2
>>> msg.rfind('is')
5
>>> msg.split(' ')
['this', 'is', 'a', 'test', 'STRING.n']
>>> msg.count('t')
3