上一篇文章:Python入門:python解釋器 交互模式——把Python當(dāng)做計(jì)算器使用
這篇文章主要介紹數(shù)據(jù)類型之一——字符串。如果你剛接觸 Python,可以慢慢讀一下這篇文章,也可以瀏覽一下我的專欄:Python入門教程;如果已經(jīng)有了一定的基礎(chǔ),可以閱讀一下我的其他文章:
http://www.lxweimin.com/u/07f03b92d7f0
讀了這篇文章,你將收獲:
- Python 數(shù)據(jù)類型之一——字符串string
- Python 中對(duì)字符串的簡(jiǎn)單操作
2. 字符串
2.1 字符串類型
除了上一篇文章中提到的數(shù)字,Python 還可以操作字符串string
。在 Python 中,字符串是用單引號(hào)或雙引號(hào)括起來的任意文本。字符串的聲明有多種形式:?jiǎn)我?hào)、雙引號(hào)、三引號(hào)(包括三個(gè)單引號(hào)或三個(gè)雙引號(hào)),單引號(hào)和雙引號(hào)內(nèi)的為單行的字符串,雙引號(hào)內(nèi)允許包含單引號(hào),單引號(hào)內(nèi)允許包含雙引號(hào)。反斜杠(\
)可以用來轉(zhuǎn)義,如下:
>>> "雙引號(hào)內(nèi)允許包含'單引號(hào)'"
"雙引號(hào)內(nèi)允許包含'單引號(hào)'"
>>> '單引號(hào)內(nèi)允許包含"雙引號(hào)"'
'單引號(hào)內(nèi)允許包含"雙引號(hào)"'
>>> "反斜杠用來轉(zhuǎn)義,比如雙引號(hào)\",特殊字符要用反斜杠轉(zhuǎn)義"
"反斜杠用來轉(zhuǎn)義,比如雙引號(hào)\",特殊字符要用反斜杠轉(zhuǎn)義"
>>> 'What\'s this?'
'What\'s this?'
在交互式解釋器中,輸出的字符串外面會(huì)加上引號(hào),特殊字符可以使用反斜杠來轉(zhuǎn)義。單引號(hào)。print()
函數(shù)會(huì)生成可讀性更強(qiáng)的輸出,它會(huì)略去兩邊的引號(hào),并且打印出經(jīng)過轉(zhuǎn)義的特殊字符:
>>> 'He said, "Hello! "' # 如果字符串中有雙引號(hào)而沒有單引號(hào),該字符串外將加雙引號(hào)來表示
'He said, "Hello! "'
>>> print('He said, "Hello! "') # print函數(shù)會(huì)產(chǎn)生可讀性更強(qiáng)的輸出
He said, "Hello! "
>>> print('What\'s this?') # 打印出經(jīng)過轉(zhuǎn)義的特殊字符
What's this?
>>> print('換行符:\n通過轉(zhuǎn)義特殊字符“n”實(shí)現(xiàn)換行') # \n可以實(shí)現(xiàn)換行
換行符:
通過轉(zhuǎn)義特殊字符“n”實(shí)現(xiàn)換行
如果你不希望前置了\
的字符轉(zhuǎn)義成特殊字符,可以使用原始字符串方式,在引號(hào)前添加 r 即可:
>>> print('C:\some\name') # \n可以實(shí)現(xiàn)換行
C:\some
ame
>>> print(r'C:\some\name') # 在引號(hào)前添加r,使用原始字符串
C:\some\name
字符串字面值還可以跨行連續(xù)輸入:用三引號(hào):"""..."""
或'''...'''
。字符串中的換行會(huì)自動(dòng)包含到字符串中,如果不想包含,可以在行尾添加一個(gè)\
。示例:
>>> print("""\
... Usage: thingy [OPTIONS]
... -h
... -H hostname
... """)
...
Usage: thingy [OPTIONS]
-h
-H hostname
字符串可以用+
進(jìn)行連接,也可以用*
進(jìn)行重復(fù):
>>> print('py' + 'thon') # 連接字符串
python
>>> print('重要的事情說三遍!' * 3) # 重復(fù)三遍
重要的事情說三遍!重要的事情說三遍!重要的事情說三遍!
相鄰的兩個(gè)字符串字面值會(huì)被自動(dòng)拼接在一起:
>>> 'py''thon'
'python'
>>> print('py''thon')
python
只能對(duì)兩個(gè)字符串字面值這樣操作,變量或表達(dá)式不行,否則會(huì)報(bào)錯(cuò):
>>> py = 'Py'
>>> py 'thon' # 不能對(duì)兩個(gè)變量或表達(dá)式進(jìn)行這樣的操作
SyntaxError: invalid syntax
>>> ('py' * 3) 'thon' # 不能對(duì)兩個(gè)變量或表達(dá)式進(jìn)行這樣的操作
SyntaxError: invalid syntax
如果你想連接變量,或者連接變量和字符串字面值,可以用+
號(hào):
>>> py + 'thon' # 用 + 號(hào)可以連接字符串或表達(dá)式
'Python'
>>> ('py' * 3) + 'thon'
'pypypython'
2.2 字符串的索引和切片
在 Python 中,字符串可以被索引,也就是下標(biāo)訪問,通俗點(diǎn)說,就是通過序號(hào)獲取字符串中某個(gè)位置的字符。字符串中的第一個(gè)字符的索引為 0:
>>> word = 'python'
>>> word[0] # 索引為0的字符,也就是第一個(gè)字符
'p'
>>> word[2] # 索引為2的字符,也就是第三個(gè)字符
't'
單個(gè)字符并沒有特殊的類型,它只是一個(gè)長(zhǎng)度為 1 的字符串。
字符串的索引還可以是負(fù)數(shù),這時(shí)候?qū)?huì)從右邊開始數(shù),也就是反方向的索引,從字符串末尾計(jì)起。要注意:0 和 -0 是一樣的,因此負(fù)數(shù)的索引應(yīng)從 -1 開始:
>>> word[-1] # 索引為-1的字符,也就是倒數(shù)第一個(gè)字符
'n'
>>> word[-5] # 索引為-5的字符,也就是倒數(shù)第五個(gè)字符
'y'
你也可以這樣理解索引,如下圖,下面兩行數(shù)字為索引,它們所指向的字符為它們右側(cè)的字符,如 0 指向的是 p,-4 指向的是 t 。
除索引外,字符串還支持切片。索引可以獲取字符串內(nèi)的某個(gè)字符,而切片可以獲取字符串內(nèi)某個(gè)范圍的子字符串:
>>> word[0:2]
'py'
>>> word[2:0]
'thon'
注意切片的開始總是被包括其中,而結(jié)束不會(huì)被包括。
切片的索引有默認(rèn)值,省略起始值則默認(rèn)為 0,省略結(jié)束值則默認(rèn)為字符串的末尾:
>>> word[:]
'python'
>>> word[:2]
'py'
>>> word[:3] + word[3:]
'python'
你也可以這么理解切片,還是這張圖,切片即是起止索引間所有字符:
如果索引沒有越界,那么切片得到的字符串長(zhǎng)度就是起止索引的差,例如
word[0:2]
的長(zhǎng)度為2。
試圖使用過大的索引將會(huì)產(chǎn)生一個(gè)錯(cuò)誤:
>>> word[50] # 索引超過字符串范圍
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
word[50]
IndexError: string index out of range
但是切片中索引的越界會(huì)被自動(dòng)處理:
>>> word[3:50]
'hon'
Python 中的字符串是不能被修改的,只能重新被賦值,它們是 immutable (不可變)類型的,因此,嘗試修改字符串的值的時(shí)候會(huì)產(chǎn)生一個(gè)錯(cuò)誤:
>>> word[0] = 'h'
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
word[0] = 'h'
TypeError: 'str' object does not support item assignment
>>> word[0:2] = 'hh'
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
word[0:2] = 'hh'
TypeError: 'str' object does not support item assignment
如果想要一個(gè)不同的字符串,應(yīng)當(dāng)新建一個(gè)或重新賦值:
>>> 'h' + word[1:]
'hython'
>>> word = 'h' + word[1:]
>>> print(word)
hython
函數(shù)len()
可以返回一個(gè)字符串的長(zhǎng)度:
>>> len(word)
6
2.3 進(jìn)階:字符串的方法
以下為操作字符串的一些方法,可能會(huì)有一些難度,建議收藏。
方法 | 描述 |
---|---|
str.count(sub[, start[, end]]) | 返回子字符串 sub 在 [start, end] 范圍內(nèi)非重疊出現(xiàn)的次數(shù),可選參數(shù) start 與 end 會(huì)被解讀為切片表示法 |
str.find(sub[, start[, end]]) | 返回子字符串 sub 在 s[start:end] 切片內(nèi)被找到的最小索引。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。 如果 sub 未被找到則返回 -1 |
str.index(sub[, start[, end]]) | 類似于 find(),但在找不到子類時(shí)會(huì)引發(fā) ValueError |
str.isalnum() | 如果字符串中的所有字符都是字母或數(shù)字且至少有一個(gè)字符,則返回 True , 否則返回 False |
str.isalpha() | 如果字符串中的所有字符都是字母,并且至少有一個(gè)字符,返回 True ,否則返回 False |
str.isdigit() | 如果字符串中的所有字符都是整數(shù),并且至少有一個(gè)字符,返回 True ,否則返回 False |
str.islower() | 如果字符串中至少有一個(gè)區(qū)分大小寫的字符,且此類字符均為小寫則返回 True ,否則返回 False |
str.isnumeric() | 如果字符串中至少有一個(gè)字符且所有字符均為數(shù)值字符(包括中文),則返回 True ,否則返回 False |
str.isspace() | 如果字符串中只有空白字符且至少有一個(gè)字符則返回 True ,否則返回 False |
str.istitle() | 如果字符串中至少有一個(gè)字符且為標(biāo)題字符串則返回 True ,例如大寫字符之后只能帶非大寫字符而小寫字符必須有大寫字符打頭。 否則返回 False |
str.isupper() | 如果字符串中至少有一個(gè)區(qū)分大小寫的字符 4 且此類字符均為大寫則返回 True ,否則返回 False |
str.lower() | 返回原字符串的副本,其所有區(qū)分大小寫的字符 4 均轉(zhuǎn)換為小寫 |
str.replace(old, new[, count]) | 返回字符串的副本,其中出現(xiàn)的所有子字符串 old 都將被替換為 new。 如果給出了可選參數(shù) count,則只替換前 count 次出現(xiàn) |
str.split(sep=None, maxsplit=-1) | 返回一個(gè)由字符串內(nèi)單詞組成的列表,使用 sep 作為分隔字符串。 如果給出了 maxsplit,則最多進(jìn)行 maxsplit 次拆分(因此,列表最多會(huì)有 maxsplit+1 個(gè)元素)。 如果 maxsplit 未指定或?yàn)?-1,則不限制拆分次數(shù)(進(jìn)行所有可能的拆分) |
str.strip([chars]) | 返回原字符串的副本,移除其中的前導(dǎo)和末尾字符。 chars 參數(shù)為指定要移除字符的字符串。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除空白符。 實(shí)際上 chars 參數(shù)并非指定單個(gè)前綴或后綴;而是會(huì)移除參數(shù)值的所有組合 |
str.upper() | 返回原字符串的副本,其中所有區(qū)分大小寫的字符均轉(zhuǎn)換為大寫 |
以上內(nèi)容參考自 Python 教程 —— Python 3.8.11文檔
后記
這篇文章就到這里了。
下一篇文章主要內(nèi)容:列表 list
文集:Python入門
接下來我們將學(xué)習(xí)在 Python 解釋器內(nèi)對(duì)列表進(jìn)行一些簡(jiǎn)單的操作。
CSDN同名搜 H_612,看更多Python文章
CSDN博客:https://blog.csdn.net/weixin_52132159