Sequences(序列)
Python的序列類型具有以下特點(diǎn):成員元素有序排列,個(gè)數(shù)有限,可重復(fù) 。序列包括: 字符串,列表 和 元組。
不可變序列:
不可變序列類型的對(duì)象在創(chuàng)建后不能更改,如果你試圖去修改一個(gè)不可變對(duì)象Python將會(huì)報(bào)錯(cuò)。如果對(duì)象包含對(duì)其他對(duì)象的引用,這些引用不能改變,但是其他對(duì)象本身可以是可變的并且可以改變。例如:元組 a = (1, [2, 3, 4], 5),中a[1]是一一個(gè)對(duì)[2, 3, 4]列表的引用,a[1]這個(gè)引用不可以改變,只能指向[2, 3, 4],但是[2, 3, 4]這個(gè)列表本身是可以改變的。字符串和元組是不可變序列。
可變序列:
可變序列在創(chuàng)建后可以更改,下標(biāo)和切片表示法可以用于賦值和del(delete)語句的目標(biāo)。列表是可變序列。
一、字符串(String)
Python 中的字符串為引號(hào)之間的字符序列集合,Python 沒有字符類型。
Python 支持使用成對(duì)的單引號(hào)或雙引號(hào)來創(chuàng)建字符串,他們作用是相同的。之所以這兩種形式都可以使用,是因?yàn)槟憧梢圆皇褂梅葱备苻D(zhuǎn)義字符就可以實(shí)現(xiàn)在一個(gè)字符串中包含其余種類的引號(hào)。并且Python傾向于打印所有這些形式的字符串為單引號(hào),除非字符串內(nèi)有了單引號(hào)了。

Python自動(dòng)的在任意的表達(dá)式中合并相鄰的字符串常量(中間沒有任何操作符),盡管可以簡(jiǎn)單地在它們之間使用 + 操作符來明確的表示這是一個(gè)合并操作。在這些字符串之間增加逗號(hào)會(huì)創(chuàng)建一個(gè)元組,而不是一個(gè)字符串。

使用索引運(yùn)算符 [ ] 和切片運(yùn)算符 [ : ] 可以得到子字符串。


在大部分應(yīng)用程序里,沒有必要顯式的刪除字符串。定義這個(gè)字符串的代碼最終會(huì)結(jié)束,那時(shí) Python 會(huì)自動(dòng)釋放這些字符串。
1、用轉(zhuǎn)義序列代表特殊字符
在Python中使用反斜杠符號(hào)( \ )來引入特殊的字節(jié)編碼(比如 \n 代表著換行符),這就是轉(zhuǎn)義序列。轉(zhuǎn)義序列讓我們能夠在字符串中嵌入不容易通過鍵盤輸入或者已作為字符串相關(guān)操作符(例如:' ,",\ 符號(hào)要在字符串中標(biāo)識(shí)自身需要在前面加上\符號(hào),例如:',",\)的字符。字符串常量中字符 “\”,以及它后面的一個(gè)或多個(gè)字符,在最終的字符串對(duì)象中會(huì)被一個(gè)單個(gè)字符所替代,這個(gè)字符通過轉(zhuǎn)義序列定義了一個(gè)對(duì)應(yīng)的二進(jìn)制值。
其中字符 \n 表示一個(gè)換行符, \t 表示一個(gè)制表符。這個(gè)字符串打印時(shí)的格式取決于打印的方式。交互模式下(調(diào)用repr()函數(shù))是以轉(zhuǎn)義字符的形式回顯的,但是print()函數(shù)(調(diào)用str()函數(shù))會(huì)將其解釋出來。
Python的轉(zhuǎn)義字符:

在Python中并不會(huì)像C語言那樣使用一個(gè)0(空)字符去結(jié)束一個(gè)字符串,Python沒有字符會(huì)結(jié)束一個(gè)字符串,Python在內(nèi)存中保存了真?zhèn)€字符串的長(zhǎng)度和文本。


雖然這樣可以在字符串中編寫反斜杠常量字符,但是你需要將上述表中的內(nèi)容都記住。所以我們更建議使用重復(fù)的兩個(gè)反斜杠或者raw字符串,來在字符串中表示反斜杠字符。

2、使用raw字符串抑制轉(zhuǎn)義
使用轉(zhuǎn)義序列來處理嵌入到字符串中的特殊字符是很合適的,但是有時(shí)候這種方式也會(huì)比較麻煩。
有時(shí)候新手會(huì)使用這樣的文件名參數(shù)去嘗試打開一個(gè)文件。問題是這里有“\U” 和 “\n”,他們會(huì)識(shí)別為轉(zhuǎn)義字符。當(dāng)然我們可以使用兩個(gè)反斜杠字符來在字符串中包留反斜杠,但是我們有更方便的方法。
種情況下使用 raw 字符串就會(huì)很方便。如果字符 r 或者 R 出現(xiàn)在字符串的第一個(gè)引號(hào)的前面,它將會(huì)關(guān)閉轉(zhuǎn)義機(jī)制。所以在 raw 字符串中 Python 會(huì)將反斜杠作為常量字符來保持,而不會(huì)匹配后面跟著的字符作為轉(zhuǎn)義序列。

Python腳本會(huì)自動(dòng)的在Windows和Linux的路徑中使用斜杠 / 表示文件路徑,因?yàn)镻ython是按照可移植的方法來解釋路徑。所以myfile = open(r"C:/User/new/test.txt", "w") 也是有效的。
注意:一個(gè)raw字符串不能以單個(gè)反斜杠結(jié)尾,因?yàn)榉葱备軙?huì)轉(zhuǎn)義后面的引號(hào)。總結(jié)來說一個(gè)raw字符串不能以奇數(shù)個(gè)反斜杠結(jié)尾。
3、使用三重引號(hào)編寫多行字符串塊
使用三引號(hào)可以允許一個(gè)字符串跨多行書寫,我們有時(shí)候稱其為塊字符串。這個(gè)形式以三重引號(hào)開始(單引號(hào)和雙引號(hào)都可以),并緊跟任意行數(shù)的文本,并且以和開始時(shí)同樣的三重引號(hào)結(jié)尾。
Python把所有在三重引號(hào)之內(nèi)的文本收集到一個(gè)字符串中,并在代碼換行處嵌入了換行符。這種方式在程序中需要輸入多行文本的任何時(shí)候都是很有用的。
三重引號(hào)字符串常用于文檔字符串,當(dāng)它出現(xiàn)在文件的特定地點(diǎn)時(shí),會(huì)被當(dāng)作注釋一樣的字符串常量。我們也經(jīng)常在開發(fā)的過程中使用三重引號(hào)來廢除一些代碼。
4、字符串格式化
字符串格式化允許在一個(gè)單個(gè)的步驟中對(duì)一個(gè)字符串執(zhí)行多個(gè)特定類型的替換。字符串的格式化可以使用字符串格式化表達(dá)式的形式,或者調(diào)用字符串的 format() 方法。
(1)表達(dá)式形式
Python在對(duì)字符串操作的時(shí)候自定義了 % 操作符,它提供了簡(jiǎn)單的方法對(duì)字符串的值進(jìn)行格式化。
格式化字符串:
- 在
%操作符的左側(cè)放置一個(gè)需要進(jìn)行格式化的字符串,這個(gè)字符串帶有一個(gè)或多個(gè)嵌入的轉(zhuǎn)換目標(biāo)(%s%d等),都已%開頭。 - 在
%操作符的右側(cè)放置一個(gè)(或多個(gè)嵌入到元祖中的)對(duì)象,這些對(duì)象將會(huì)插入到左側(cè)想讓Python進(jìn)行格式化字符串的一個(gè)(或多個(gè))轉(zhuǎn)換目標(biāo)的位置上去。
轉(zhuǎn)換目標(biāo)格式:
% [(name)] [flags] [width] [.precision] typecode
參數(shù)說明:
- name : 可選,用于選擇指定的key
-
flags:可選,用于表示對(duì)其方式,通常和 width 一起使用,無居中功能
(+:右對(duì)齊 -:左對(duì)齊 空格:右對(duì)齊 。。。) - width:可選,指定占位寬度
- precision : 有用,小數(shù)點(diǎn)后保留的位數(shù)
-
typecode : 必選,
- %s : 字符串
- %r:同%s,但是用repr,而不是str
- %c:字符
- %i:整數(shù)
- %u:無號(hào)(整數(shù))
- %%:常量%
- %d:十進(jìn)制
- %o:八進(jìn)制
- %x: 十六進(jìn)制
由于對(duì)象的每個(gè)類型都可以轉(zhuǎn)換成字符串(打印時(shí)所使用的),每一個(gè)與 %s 轉(zhuǎn)換目標(biāo)一同參與的對(duì)象類型都可以轉(zhuǎn)換代碼。正因?yàn)槿绱?,除非你要做特殊的格式化,一般你只需要記得?%s 這個(gè)代碼來格式化表達(dá)式就可以了。
格式化總是返回新的字符串作為結(jié)果而不是對(duì)左側(cè)的字符串進(jìn)行修改(由于字符串是不可變對(duì)象)。

(2)format()方法
字符串對(duì)象的 format() 方法使用主體字符串作為模板,并且接受任意多個(gè)表示要根據(jù)模板替換的值的參數(shù)。在主體字符串中,花括號(hào)通過位置(例如:{1})或關(guān)鍵字(例如:{food})指出替換目標(biāo)及要插入的參數(shù),因?yàn)镻ython的函數(shù)和方法的參數(shù)可以使用位置或關(guān)鍵字名稱來傳遞。

就像 % 表達(dá)式和其他字符串方法一樣,format() 創(chuàng)建并返回一個(gè)新的字符串對(duì)象(因?yàn)樽址遣豢勺儗?duì)象類型,所以 format() 函數(shù)必須創(chuàng)建一個(gè)新對(duì)象)。
格式化字符串:
對(duì)于格式化方法,我們?cè)谔鎿Q目標(biāo)的標(biāo)識(shí)之后使用一個(gè)冒號(hào),后面跟著可以指定字段大小,對(duì)齊方式和一個(gè)特定類型編碼的格式化聲明。
轉(zhuǎn)換目標(biāo)格式:
{ fieldname ! conversionflag : formatspec }
- fieldname:是指定參數(shù)的一個(gè)數(shù)字或關(guān)鍵字,后面跟著可選的 “.name” 或 "[index]" 成分引用。
- conversionflag:可以是r、s、或者a分別是在該值上對(duì)repr、str或ascii內(nèi)置函數(shù)的一次調(diào)用。
- formatspec:指定了如何表示該值,包括字段寬度、對(duì)齊方式、補(bǔ)零、小數(shù)點(diǎn)精度等細(xì)節(jié),并且以一個(gè)可選的數(shù)據(jù)類型編碼結(jié)束。
冒號(hào)后面的 formatspec 組成形式上的描述如下(方括號(hào)表示可選的組成,并且不能編寫為常量):
[ [ fill ] align ] [ sign ] [ # ] [ 0 ] [ width ] [ .precision ] [ typecode ]
align 可能是<、>、= 或^,分別表示左對(duì)齊、右對(duì)齊、一個(gè)標(biāo)記字符后的補(bǔ)充或居中對(duì)齊。formatspec 也包含嵌套的、只帶有{}的格式化字符串,它從參數(shù)列表動(dòng)態(tài)地獲取值(和格式化表達(dá)式中的*很相似)。
5、常用字符串內(nèi)建方法
除了一般的序列操作,字符串還有獨(dú)有的一些操作作為方法存在(對(duì)象的函數(shù),將會(huì)通過一個(gè)調(diào)用表達(dá)式觸發(fā))。盡管序列操作是通用的,但方法不通用(雖然某些類型共享某些方法名,字符串的方法只能用于字符串)。一條簡(jiǎn)明的法則是這樣的:可作用于多種類型的通用類型操作都是以內(nèi)置函數(shù)或表達(dá)式的形式出現(xiàn)的(例如:len(x),x[0]),但是類型特定的操作是以方法調(diào)用的形式出現(xiàn)的(例如:string.upper())。
注意: 想要查找對(duì)象的所有內(nèi)置方法,你可以調(diào)用內(nèi)置的 dir() 函數(shù),他將返回一個(gè)列表,其中包含了對(duì)象的所有屬性,由于方法是函數(shù)屬性,他們也會(huì)在這個(gè)列表中出現(xiàn)。dir() 函數(shù)簡(jiǎn)單的給出了方法的名稱。要查詢他們是做什么的,可以將其傳遞給 help() 函數(shù)。help() 是一個(gè)隨Python一起分發(fā)的面向系統(tǒng)代碼的接口。

注意: 由于字符串是不可變對(duì)象,所以字符串的內(nèi)置方法都不會(huì)改變?cè)嫉淖址?,而是?huì)創(chuàng)建一個(gè)新的字符串作為結(jié)果返回。
(1)去掉字符串中指定位置的指定字符
string.lstrip([obj]) : 截掉 string 左邊的字符(默認(rèn)為空格)
string.rstrip([obj]) : 刪除 string 末尾的字符(默認(rèn)為空格)
string.strip([obj]) : 在 string 上執(zhí)行 lstrip()和 rstrip()

(2)按照指定的字符拆分字符串
string.split(str="", num=string.count(str))
以 str 為分隔符切片 string,如果 num有指定值,則僅分隔 num 個(gè)子字符串

(3)按照指定的字符把列表元素拼接在一起
string.join(seq) Merges (concatenates)
以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串

(4)判斷字符串中是否包含某個(gè)字符

(5)將字符串的首字母大寫
string.capitalize()

(6)使用指定的字符串替換字符串中的指定元素
string.replace(str1, str2,num=string.count(str1))
把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次。

(7)使用指定的符號(hào)填充指定大小的指定位置
string.ljust(width,char=' ')
返回一個(gè)原字符串左對(duì)齊,并使用使用指定的符號(hào)填充至長(zhǎng)度 width 的新字符串
string.rjust(width,char=' ')
返回一個(gè)原字符串右對(duì)齊,并使用使用指定的符號(hào)填充至長(zhǎng)度 width 的新字符串
string.center(width,char=' ')
把字符串放到指定大小的中間位置,并使用指定的符號(hào)填充至長(zhǎng)度 width 的新字符串

(8)查找字符串中的指定的字符的位置
string.find(str, beg=0, end=len(string))
檢測(cè) str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi)。如果找到返回開始的索引值,否則返回-1。
string.index(str, beg=0, end=len(string))
跟 find()方法一樣,只不過如果 str 不在 string 中會(huì)報(bào)一個(gè)異常.

(9)判斷字符串是否為數(shù)字
string.isdigit()
如果 string 只包含數(shù)字則返回 True 否則返回 False.

(10)判斷字符串是否已指定的字符開頭或者結(jié)尾
string.startswith(obj, beg=0,end=len(string))
檢查字符串是否以 obj 開頭,是則返回 True,否則返回 False。如果 beg 和 end 指定值,則在指定范圍內(nèi)是否以 obj 開頭, 如果是, 返回 True,否則返回 False.
string.endswith(obj, beg=0,end=len(string))
檢查字符串是否以 obj 結(jié)束,是則返回 True,否則返回 False。如果 beg 和 end 指定值,則在指定范圍內(nèi)是否以 obj 結(jié)束, 如果是, 返回 True,否則返回 False.

(11)把字符串轉(zhuǎn)換為大寫或者小寫或者翻轉(zhuǎn)
string.upper() : 轉(zhuǎn)換 string 中的小寫字母為大寫
string.lower() : 轉(zhuǎn)換 string 中所有大寫字符為小寫.
string.swapcase() : 翻轉(zhuǎn) string 中的大小寫


(12)返回 str 在 string 里面出現(xiàn)的次數(shù)
***string.count(str, beg=0, end=len(string)) ***
如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)。

(13)以指定的格式編碼字符串
string.encode(encoding='UTF-8', errors='strict')
以 encoding 指定的編碼格式編碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè)ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'

(14)以指定的編碼格式解碼字符串
string.decode(encoding='UTF-8', errors='strict')
以 encoding 指定的編碼格式解碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè)ValueError 的 異 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'。

(15) 判斷字符串中的區(qū)分大小寫的字符是否全為小寫或者大寫
string.islower()
如果 string 中包含至少一個(gè)區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫,則返回 True,否則返回 False。
string.isupper()
如果 string 中包含至少一個(gè)區(qū)分大小寫的字符, 并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 True,否則返回 False。

(16) 判斷字符串中的字符情況
string.isalnum()
如果 string 至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False
string.isalpha()
如果 string 至少有一個(gè)字符并且所有字符都是字母則返回 True,否則返回 False
string.isdecimal()
如果 string 只包含十進(jìn)制數(shù)字則返回 True 否則返回 False.
string.isnumeric()
如果 string 中只包含數(shù)字字符,則返回 True,否則返回 False
string.isspace()
如果 string 中只包含空格,則返回 True,否則返回 False.

(17)ASCII碼轉(zhuǎn)換 chr() 和 ord()
內(nèi)建函數(shù)ord() 將一個(gè)碼點(diǎn)從字符串形式轉(zhuǎn)換為范圍在0 - 10FFFF之間的一個(gè)整數(shù);chr() 將0 - 10FFFF范圍之間的一個(gè)整數(shù)轉(zhuǎn)換為對(duì)應(yīng)的長(zhǎng)度為1的字符串對(duì)象。
《Python基礎(chǔ)手冊(cè)》系列:
Python基礎(chǔ)手冊(cè) 1 —— Python語言介紹
Python基礎(chǔ)手冊(cè) 2 —— Python 環(huán)境搭建(Linux)
Python基礎(chǔ)手冊(cè) 3 —— Python解釋器
Python基礎(chǔ)手冊(cè) 4 —— 文本結(jié)構(gòu)
Python基礎(chǔ)手冊(cè) 5 —— 標(biāo)識(shí)符和關(guān)鍵字
Python基礎(chǔ)手冊(cè) 6 —— 操作符
Python基礎(chǔ)手冊(cè) 7 —— 內(nèi)建函數(shù)
Python基礎(chǔ)手冊(cè) 8 —— Python對(duì)象
Python基礎(chǔ)手冊(cè) 9 —— 數(shù)字類型
Python基礎(chǔ)手冊(cè)10 —— 序列(字符串)
Python基礎(chǔ)手冊(cè)11 —— 序列(元組&列表)
Python基礎(chǔ)手冊(cè)12 —— 序列(類型操作)
Python基礎(chǔ)手冊(cè)13 —— 映射(字典)
Python基礎(chǔ)手冊(cè)14 —— 集合
Python基礎(chǔ)手冊(cè)15 —— 解析
Python基礎(chǔ)手冊(cè)16 —— 文件
Python基礎(chǔ)手冊(cè)17 —— 簡(jiǎn)單語句
Python基礎(chǔ)手冊(cè)18 —— 復(fù)合語句(流程控制語句)
Python基礎(chǔ)手冊(cè)19 —— 迭代器
Python基礎(chǔ)手冊(cè)20 —— 生成器
Python基礎(chǔ)手冊(cè)21 —— 函數(shù)的定義
Python基礎(chǔ)手冊(cè)22 —— 函數(shù)的參數(shù)
Python基礎(chǔ)手冊(cè)23 —— 函數(shù)的調(diào)用
Python基礎(chǔ)手冊(cè)24 —— 函數(shù)中變量的作用域
Python基礎(chǔ)手冊(cè)25 —— 裝飾器
Python基礎(chǔ)手冊(cè)26 —— 錯(cuò)誤 & 異常
Python基礎(chǔ)手冊(cè)27 —— 模塊
Python基礎(chǔ)手冊(cè)28 —— 模塊的高級(jí)概念
Python基礎(chǔ)手冊(cè)29 —— 包