【Python學習筆記】三、序列(Sequence)
3.1序列簡介
• 資料結構是通過某種方式組織在一起的元素的集合。
• 容器(Container)是一種Python的資料結構,基本上是包含其他物件的任意物件。序列和對映(如字典)是兩類主要的容器。集合(Set)也是容器型別。
• 序列是最基本的資料結構,是通過對資料元素進行編號將它們組織在一起的資料元素的集合。
• Python有6中種內建的序列:列表、元組、字串、Unicode字串、buffer物件、xrange物件。
3.2 通用序列操作
(1)索引(Indexing)
• 序列中的每個元素被分配一個序號,即元素的位置,稱為索引。以正數第一個元素的索引為0,正數第二個元素的索引為1,倒數第一個元素的索引為-1,以此類推。
(2)分片(Slicing)
• 分片使用2個冒號分隔的3個數字來完成:[srart:end:step]
• 第一個數字表示切片開始位置(預設為0),第二個數字表示切片截止(但不包含)位置(預設為列表長度),第三個數字表示切片的步長(預設為1)
• 可以使用切片來擷取列表中的任何部分,得到一個新列表,也可以通過切片來修改和刪除列表中部分元素,甚至可以通過切片操作為列表物件增加元素。
• 與使用下標訪問列表元素的方法不同,切片操作不會因為下標越界而丟擲異常,而是簡單地在列表尾部截斷或者返回一個空列表,程式碼具有更強的健壯性。
• step為正時,Python會從序列頭部開始向右提取元素,直到最後一個元素, start索引的元素應在end索引的元素左邊,否則將返回一個空序列;step為負時, Python會從序列尾部開始向左提取元素,直到第一個元素,這時start索引的元素應在end索引的元素右邊,否則將返回一個空序列。step不能為0。
• 當step省略時可以省略最後一個冒號或置空最後一個索引
[start:end]或[start:end:]
• 當start或end省略時要置空對應索引
[start:]或[:end]或[:]
•切片可以返回列表的淺拷貝a[:]==a
• a[:]將得到包含a所有元素的分片,是一種很有效率的複製整個列表的方法
•
(3)加(Adding)
• 序列連線操作,只有相同型別的序列才能進行連線操作
• 實質上是建立了一個新序列並將原序列中的元素和新元素依次複製到新序列的記憶體空間
(4)乘(Multiplying)
• 序列重複操作,用數字x乘以一個序列會產生新的序列,新的序列是原序列的重複
(5)成員資格
• 使用in運算子(布林運算子)檢查一個元素是否在序列中,返回布林值True或False
>>> 2 in [2,3,4]
True
>>> [2] in [2,3,4]
False
>>>‘P’in ‘PYTHON’
True
(6)內建函式
• len():返回序列中的元素個數
• max()、 min():返回序列中的最大或最小元素
(7)迭代(iteration)
(8)賦值、淺拷貝與深拷貝
①直接賦值:其實就是物件的引用(別名)。
b = a: 賦值引用,a 和 b 都指向同一個物件。
②淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。
b =a.copy(): 淺拷貝, a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是引用)。
如果原地修改子物件,父物件也會改變。
③深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。
b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。
3.2列表(List)
• 列表是Python中內建可變序列,是若干元素的有序集合。類似C語言中的連結串列。列表中的每一個數據稱為元素,列表的所有元素放在一對中括號[ 和 ] 中,並使用逗號分隔開。
• 當列表元素增加或刪除時,列表物件自動進行擴充套件或收縮記憶體,保證元素之間沒有縫隙。儘量從列表尾部進行列表元素的增加與刪除操作。
• 在Python中,一個列表中的資料型別可以各不相同,可以同時分別為整數、實數、字串等基本型別,甚至是列表、元組、字典、集合以及其他自定義型別的物件。
(1)列表的建立
①賦值建立
>>> my_list = ['a', 'b', 'mpilgrim', 'z', 'example']
②內建函式建立
• list()函式:將一個序列轉化成列表
>>> my_list = list((1,2,3))
[1,2,3]
>>> my_list = list(‘hello’)
[‘h’, ‘e’, ‘l’, ‘l, ‘o]
• range()函式
>>>list(range([start,]stop[,step]))
• range()函式在3.x中返回一個range可迭代物件
(2)列表的操作
① “+”運算子
• 嚴格意義上來講,這並不是真的為列表新增元素,而是建立一個新列表,並將原列表中的元素和新元素依次複製到新列表的記憶體空間。由於涉及大量元素的複製,該操作速度較慢,在涉及大量元素新增時不建議使用該方法。
>>>a=[1]
>>>b=a
>>>a=a+[1]
>>>a
[1, 1]
>>>b
[1]
② *運算子
• 使用乘法來擴充套件列表物件,將列表與整數相乘,生成一個新列表,新列表是原列表中元素的重複。
>>>a=[1]
>>>b=a
>>>a=a*2
>>>a
[1, 1]
>>>b
[1]
• 需要注意的是,當使用* 運算子將包含列表的列表重複並建立新列表時,並不建立元素的複製,而是建立已有物件的引用。因此,當修改其中一個值時,相應的引用也會被修改
>>> x = [[None] * 2] * 3
>>> x
[[None, None], [None, None], [None, None]]
>>> x[0][0] = 5
>>> x
[[5, None], [5, None], [5, None]]
③ 基本賦值與分片賦值
• 基本賦值不能為一個不存在的元素進行賦值
• 分片賦值可以將一個分片(包括空的分片中的列表元素)替換成一個新的分片(序列)中的元素
• 可以通過分片賦值一次為多個元素賦值和插入新元素
>>>a=[1,2,3,4]
>>>a[2:]=[]
>>>a
[1,2]
>>>a[1:]=[1,2,3]或a[1:]=‘123’或a[1:]=(1,2,3)
>>>a
[1,1,2,3]
>>>a[1:1]=‘p’或a[1:1]=[‘p’]
>>>a
[1,‘p’,1,2,3]
>>>a[1:]=[‘python’]
[1,‘python’]
④ 刪除元素
可以刪除整個列表
• >>>del list
也可刪除指定位置上的元素
• >>>del list[0]
(3)列表的方法
方法是一個與某些物件有緊密聯絡的函式
方法 | 說明 |
list.append(x) | 原位置,將元素x新增至列表尾部,“入棧” |
list.extend(L) | 將列表L中所有元素新增至列表尾部 |
list.insert(index, x) | 在列表指定位置index處新增元素x |
list.remove(x) | 移除列表中某個值的首個匹配項 |
list.pop([index]) | 刪除並返回列表物件指定位置的元素,“出棧” |
list.clear() | 刪除列表中所有元素,但保留列表物件,該方法在Python2中沒有 |
list.index(x) | 使用列表物件的index()方法獲取指定元素首次出現的下標。若列表物件中不存在指定元素,則丟擲異常。 |
list.count(x) | 統計指定元素在列表物件中出現的次數 |
list.reverse() | 對列表元素進行原地逆序 |
list.sort() | 對列表元素進行原地排序 a.sort(reverse = True)相當於reverse |
list.copy() | 返回列表物件的淺拷貝,該方法在Python2中沒有 |
① append()方法
使用列表物件的append()方法,
原地修改列表,是真正意義上的在列表尾部新增元素,速度較快
>>>a=[1]
>>>b=a
>>>a.append(1)
>>>a
[1, 1]
>>>b
[1, 1]
② extend()方法
使用列表物件的extend()方法可以將另一個迭代物件的所有元素新增至該列表物件的尾部。通過extend()方法來增加列表元素不改變其記憶體首地址,屬於原地操作。
a.extend(b)相當於a[len(a):]=b
>>>a=[1]
>>>b=a
>>>a.extend([1])
>>>a
[1, 1]
>>>b
[1, 1]
注意:extend與append的區別
>>>x = [1, 2, 3]
>>>x.append([4, 5])
>>>x
[1, 2, 3, [4, 5]]
>>>x = [1, 2, 3]
>>>x.extend([4, 5])
>>>x
[1, 2, 3, 4, 5]
③ insert方法
• 應儘量從列表尾部進行元素的增加與刪除操作
• 列表的insert()可以在列表的任意位置插入元素,但由於列表的自動記憶體管理功能,insert()方法會涉及到插入位置之後所有元素的移動,這會影響處理速度
• 類似的還有後面介紹的remove()方法以及使用pop()函式彈出列表非尾部元素和使用del命令刪除列表非尾部元素的情況
• 可以用分片賦值實現同樣效果
• >>>a.insert(position,data)
④ remove()方法
• 使用列表物件的remove()方法刪除首次出現的指定元素,如果列表中不存在要刪除的元素,則丟擲異常。
•
• 注意:刪除列表中指定元素的所有重複時不應該使用“迴圈+remove()”的方法
• 因為每當插入或刪除一個元素之後,該元素位置後面所有元素的索引就都改變了,這時可能會發生索引出錯的情況
⑤ pop()方法
• 實現一種常用資料結構——棧
• 用append作為入棧(pop)方法,pop作為出棧(push)方法
• 使用列表的pop()方法刪除並返回指定(預設為最後一個)位置上的元素,如果給定的索引超出了列表的範圍則丟擲異常
⑥ sort()方法
在保留原列表的情況下得到一個已排序的列表副本
y=x[:]
y.sort()
或y=sorted(x)
⑦ copy()方法:深拷貝
•
3.3元組(Tuple)
• 元組是Python中內建不可變序列
(1)元組的建立
• 元組可以表示為一組用逗號分隔的值,可以通過圓括號括起來。相當於不可變的列表。
• 空元組:()
• 單值元組必須加一個逗號
(1,)或1,
• 使用tuple()將一個序列轉換為元組
(2)元組的操作
• 元組支援切片操作,但只能通過切片來訪問元組中的元素,而不能使用切片來修改元組中元素的值。
• 元組的速度比列表更快。如果定義了一系列常量值,而所需做的僅是對它進行遍歷,那麼一般使用元組而不用列表。
• 元組對不需要改變的資料進行“防寫”將使得程式碼更加安全。
• 一些元組可用作字典的鍵(特別是包含字串、數值和其它元組這樣的不可變資料的元組)。列表永遠不能當做字典鍵使用,因為列表不是不可變的。
• 元組的不可變性只適用於元組本身頂層而並非其內容
•
• zip(列表1,列表2,…)將多個列表對應位置元素組合為元組列表(以最短列表的長度為準),並返回元組列表(Python2.x)/可迭代物件(Python3.x)
• zip(*元組列表)將實現逆操作
Python 3.x:
>>> zipList = zip([1, 2, 3], [4, 5, 6])
>>> zipList
<zip at 0x221cfc157c8>
>>> list(zipList)
[(1, 4), (2, 5), (3, 6)]
>>> unzipList=zip(*zipList)
>>> list(unzipList)
[[1, 2, 3], [4, 5, 6]]
(3)元組的方法
• 元組沒有append()、extend()和insert()等方法,無法向元組中新增元素。
• 元組沒有remove()或pop()方法,也無法對元組元素進行del操作,不能從元組中刪除元素。
• 元組有index()和count()方法
•
3.4字串(String)
• String屬於Python不可變序列
• Python字串駐留機制:對於短字串,將其賦值給多個不同的物件時,記憶體中只有一個副本,多個物件共享該副本。長字串不遵守駐留機制。
• Python不支援單字元型別,單字元也在Python也是作為一個字串使用
(1)字串的建立
• Python中單引號、雙引號、三單引號、三雙引號使用完全相同,可以互相巢狀
• 三引號可以將複雜的字串進行復制,允許一個字串跨多行,字串中可以包含換行符、製表符以及其他特殊字元。
cursor.execute('''
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
• 三引號還可以在程式中表示較長的註釋
• 若字串包含某種引號,則不能用該引號來界定字串,否則需要使用反斜槓“\”對字串中的引號進行轉義
‘Let\’s say “Hello,world!”’
‘‘‘Let’s say“Hello,world!”’’’
• 字串的級聯:書寫含有單引號和雙引號的字串時,可以採用一個緊接另一個的方式寫兩個字串
“Let’s say”‘“Helloworld!”’
(2)轉義字元
轉義字元 | 描述 |
\(在行尾時) | 續行符 |
\\ | 反斜槓符號 |
\' | 單引號 |
\" | 雙引號 |
\a | 響鈴 |
\b | 退格(Backspace) |
\e | 轉義 |
\000 | 空 |
\n | 換行 |
\v | 縱向製表符 |
\t | 橫向製表符 |
\r | 回車 |
\f | 換頁 |
\oyy | 八進位制數,yy代表的字元,例如:\o12代表換行 |
\xyy | 十六進位制數,yy代表的字元,例如:\x0a代表換行 |
\other | 其它的字元以普通格式輸出 |
(3)字串的操作
操作符 | 描述 | 例項 |
+ | 字串連線 | >>>a + b'HelloPython' |
* | 重複輸出字串 | >>>a * 2'HelloHello' |
[] | 通過索引獲取字串中字元 | >>>a[1]'e' |
[ : ] | 擷取字串中的一部分 | >>>a[1:4]'ell' |
in | 成員運算子 - 如果字串中包含給定的字元返回 True | >>>"H"inaTrue |
not in | 成員運算子 - 如果字串中不包含給定的字元返回 True | >>>"M"notinaTrue |
r/R | 原始字串 - 原始字串:所有的字串都是直接按照字面的意思來使用,沒有轉義特殊或不能列印的字元。 原始字串除在字串的第一個引號前加上字母"r"(可以大小寫)以外,與普通字串有著幾乎完全相同的語法。 | >>>printr'\n' \n >>> printR'\n' \n |
% | 格式字串 | |
len(str) | 返回字串長度 | |
max(str) | 返回字串 str 中最大的字母。 | |
min(str) | 返回字串 str 中最小的字母。 |
(4)字串的格式化
格式轉換說明符包含以下部分:%+輔助命令+格式化符號
①輔助指令(可選)
符號 | 功能 |
- | 用做左對齊 |
+ | 在正數前面顯示加號( + ) |
<sp> | 在正數前面顯示空格 |
# | 在八進位制數前面顯示零('0'),在十六進位制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X') |
0 | 顯示的數字前面填充'0'而不是預設的空格 |
% | '%%'輸出一個單一的'%' |
(var) | 對映變數(字典引數) |
m.n | (1)m:最小字元寬度(可選): 如果達到字元寬度,數字和字串將正常顯示;若未達到字元寬度,欄位寬度不足處將預設有空白字元填充 (2).n:點精度值(可選):如果轉換的是實數,精度值就表示出現在小數點後的位數;如果轉換的是字串,那麼該數字表示最大欄位寬度。 |
* | 如果m或n的值是*,將會從元組中讀出m或n的值 (定義寬度或者小數點精度) |
②格式化符號
格式字元 | 說明 |
%s | 字串 (採用str()的顯示) |
%c | 單個字元 |
%o | 八進位制整數 |
%d | 十進位制整數 |
%i | 十進位制整數 |
%x | 十六進位制整數 |
%X | 十六進位制整數(大寫) |
%e | 指數 (基底寫為e) |
%E | 指數 (基底寫為E) |
%f、%F | 浮點數 |
%g | 指數(e)或浮點數 (根據顯示長度) |
%G | 指數(E)或浮點數 (根據顯示長度) |
%% | 字元"%""%" |
注:十進位制沒有對應的格式字元,用format格式化函式格式輸出。
(5)format格式化函式
• Python2.6 開始,新增了一種格式化字串的函式 str.format(),它增強了字串格式化的功能。基本語法是通過 {} 和 : 來代替以前的 % 。
• format 函式可以接受不限個引數,位置可以不按順序。
• ^, <, > 分別是居中、左對齊、右對齊,後面頻寬度, : 號後面帶填充的字元,只能是一個字元,不指定則預設是用空格填充。
• + 表示在正數前顯示 +,負數前顯示 -; (空格)表示在正數前加空格
• b、d、o、x 分別是二進位制、十進位制、八進位制、十六進位制。
• 此外我們可以使用大括號 {} 來轉義大括號
數字 | 格式 | 輸出 | 描述 |
3.1415926 | {:.2f} | 3.14 | 保留小數點後兩位 |
3.1415926 | {:+.2f} | +3.14 | 帶符號保留小數點後兩位 |
-1 | {:+.2f} | -1.00 | 帶符號保留小數點後兩位 |
2.71828 | {:.0f} | 3 | 不帶小數 |
5 | {:0>2d} | 05 | 數字補零 (填充左邊, 寬度為2) |
5 | {:x<4d} | 5xxx | 數字補x (填充右邊, 寬度為4) |
10 | {:x<4d} | 10xx | 數字補x (填充右邊, 寬度為4) |
1000000 | {:,} | 1,000,000 | 以逗號分隔的數字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指數記法 |
13 | {:10d} | 13 | 右對齊 (預設, 寬度為10) |
13 | {:<10d} | 13 | 左對齊 (寬度為10) |
13 | {:^10d} | 13 | 中間對齊 (寬度為10) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) | 1011 11 13 b 0xb 0XB | 進位制 |
(6)Unicode與UTF
• 從通訊的角度理解,Unicode是信源編碼,是對字符集數字化;UTF-8是通道編碼,為更好的儲存和傳輸。
• UTF-8以位元組為單位對Unicode進行編碼,特點是對不同範圍的字元使用不同長度的編碼。
Python 2.x與Python 3.x在支援Unicode方面的異同
• Python 2.7中,字串分為str和Unicode兩種,str表示8位文字(8-bit string)和二進位制資料;Unicode表示Unicode文字。加字首u或U,如 u"this is an unicode string"即為Unicode字串。預設編碼為ASCII。basestring是str和unicode的超類,也是抽象類,因此不能被呼叫和例項化,但可以被用來判斷一個物件是否為str或者unicode的例項(Python3.5中沒有basestring)。
•Python3.5中不再有Unicode型別,str型別支援Unicode,或者說Python3.5中的str型別就相當於Python2.7中的unicode型別,而多出一種bytes型別,在Python 3.5中, “bytes” 型別儲存的是 byte 串。可以通過一個 b 字首來宣告 bytes。預設編碼為UTF-8。
• 簡單理解:
在 Python 2.7 中的 str(無字首)在 Python 3.5 中叫做bytes(字首b)
在 Python 2.7 中的 unicode(字首u)在 Python 3.5 中叫做 str(無字首)
•str編碼成bytes,bytes解碼成str
•
(7)字串的方法
方法 | 描述 |
編解碼方法 | |
bytes.decode ([encoding ="utf-8", errors="strict"]) | 以指定的編碼格式解碼 bytes 物件, 返回解碼後的字串 Python3 中str沒有 decode 方法,我們使用 bytes 物件的 decode() 方法來解碼給定的 bytes 物件 預設編碼為 'utf-8' 引數 encoding -- 要使用的編碼,如"UTF-8"。 errors -- 設定不同錯誤的處理方案。 預設為 'strict',意為編碼錯誤引起一個UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通過 codecs.register_error() 註冊的任何值。 >>>str = "菜鳥教程"; >>>str_utf8 = str.encode("UTF-8") >>>print("UTF-8 編碼:", str_utf8) UTF-8編碼: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b' >>>print("UTF-8 解碼:", str_utf8.decode('UTF-8','strict')) UTF-8解碼:菜鳥教程 |
encode ([encoding ='UTF8', errors='strict']) | 以 encoding 指定的編碼格式編碼字串,如果出錯預設報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace' 引數 encoding -- 要使用的編碼,如: UTF-8。 errors -- 設定不同錯誤的處理方案。 |
查詢方法 | |
count (str, [beg=0, end=len(string)]) | 用於統計字串裡某個字元出現的次數。可選引數為在字串搜尋的開始與結束位置 引數 sub -- 搜尋的子字串 start -- 字串開始搜尋的位置。預設為第一個字元,第一個字元索引值為0。 end -- 字串中結束搜尋的位置。字元中第一個字元的索引為 0。預設為字串的最後一個位置。 |
find (str, beg=0 end=len(string)) | 檢測 str 是否包含在字串中,如果指定範圍 beg 和 end ,則檢查是否包含在指定範圍內 如果包含返回開始的索引值,否則返回-1 引數 str -- 指定檢索的字串 beg -- 開始索引,預設為0。 end -- 結束索引,預設為字串的長度。 |
rfind (str, beg=0,end=len(string)) | 從右邊開始的find() |
index(str, beg=0, end=len(string)) | index() 方法檢測字串中是否包含子字串 str ,如果指定 beg和 end範圍,則檢查是否包含在指定範圍內 如果包含子字串返回開始的索引值,否則丟擲異常。 引數 str -- 指定檢索的字串 beg -- 開始索引,預設為0。 end -- 結束索引,預設為字串的長度。 |
rindex( str, beg=0, end=len(string)) | 從右邊開始的index() |
startswith (str, beg=0, end=len(string)) | 檢查字串是否是以指定子字串開頭,如果是則返回 True,否則返回 False。如果引數 beg 和 end 指定值,則在指定範圍內檢查。 引數 str -- 檢測的字串。 strbeg -- 可選引數用於設定字串檢測的起始位置。strend -- 可選引數用於設定字串檢測的結束位置。 |
endswith (suffix, [beg=0, end=len(string)]) | 檢查字串是否以suffix結束,如果是,返回 True,否則返回 False.可選引數"start"與"end"為檢索字串的開始與結束位置。 引數 suffix -- 該引數可以是一個字串或者是一個元素。 start -- 字串中的開始位置。 end -- 字元中結束位置。 |
isalnum() | 如果字串至少有一個字元並且所有字元都是字母或數字則返回True,否則返回 False |
isalpha() | 如果字串至少有一個字元並且所有字元都是字母則返回 True, 否則返回 False |
isdigit() | 如果字串至少有一個字元並且所有字元都是數字則返回 True, 否則返回 False |
isnumeric() | 如果Unicode字串(str)中只包含數字字元,則返回 True,否則返回 False 數字字元包含的內容很廣,包括羅馬數字、漢字數字等 Bytes字串會丟擲AttributeError異常 |
isdecimal() | 如果Unicode字串(str)中只包含十進位制字元,則返回 True,否則返回 False |
islower() | 如果字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False |
isupper() | 如果字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True,否則返回 False |
isspace() | 如果字串中只包含空白,則返回 True,否則返回 False |
istitle() | 如果字串中包含至少一個區分大小寫的字元的單詞,並且所有的單詞拼寫首字母是否為大寫,且其他字母為小寫則返回 True,否則返回 False. |
轉換方法 | |
lstrip([chars]) | 截掉字串左邊的空格或指定字元。 引數 chars --指定擷取的字元。 |
rstrip() | 截掉字串右邊的空格或指定字元。 |
strip([chars]) | 在字串上執行 lstrip()和 rstrip() |
capitalize() | 將字串的第一個字元轉換為大寫 |
lower() | 轉換字串中所有大寫字元為小寫. |
upper() | 轉換字串中的小寫字母為大寫 |
swapcase() | 將字串中大寫轉換為小寫,小寫轉換為大寫 |
title() | 返轉換字串中所有單詞的首字母為大寫,其餘字母均為小寫 |
expandtabs (tabsize=8) | 把字串 string 中的 tab 符號轉為空格,tab 符號預設的空格數是 8 。 引數 tabsize -- 指定轉換字串中的 tab 符號('\t')轉為空格的字元數。 |
replace (old , new [, max]) | 把字串中的 old(舊字串) 替換成 new(新字串),如果指定第三個引數max,則替換不超過 max 次。 引數 old -- 將被替換的子字串。 new -- 新字串,用於替換old子字串。 max -- 可選字串, 替換不超過 max 次 |
maketrans(intab, outtab) | • 建立字元對映的轉換表 • 兩個引數字串的長度必須相同,為一一對應的關係 • 引數 • intab -- 字串中要替代的字元組成的字串。 outtab -- 相應的對映字元的字串。 |
translate (table, [deletechars=""]) | • 根據引數table給出的表(包含 256 個字元)轉換字串的字元,要過濾掉的字元放到 deletechars 引數中。 • 引數 • table -- 翻譯表,翻譯表是通過maketrans()方法轉換而來。deletechars -- 字串中要過濾的字元列表。 >>>intab ="aeiou" >>>outtab = "12345" >>>trantab = str.maketrans(intab, outtab) >>>str ="this is string example....wow!!!" >>>print (str.translate(trantab)) th3s 3s str3ng 2x1mpl2....w4w!!! |
構造方法 | |
center (width[, fillchar]) | 返回一個指定的寬度 width 居中的字串,如果 width 小於字串寬度直接返回字串,否則使用 fillchar 去填充。 引數 width -- 字串的總寬度。 fillchar -- 填充字元。(預設為空格) >>>str = "python" >>>print ( str.center(10, '*')) **python** |
ljust (width[, fillchar]) | 返回一個原字串左對齊,並使用 fillchar 填充至長度 width 的新字串,fillchar 預設為空格。 |
rjust (width,[, fillchar]) | 返回一個原字串右對齊,並使用fillchar(預設空格)填充至長度 width 的新字串 |
zfill (width) | 返回長度為 width 的字串,原字串右對齊,前面填充0 引數 width -- 指定字串的長度。原字串右對齊,前面填充0。 |
分隔連線方法 | |
str.join(seq) | 以指定字串(str)作為分隔符,將seq中所有的元素(的字串表示)合併為一個新的字串 引數 sequence -- 要連線的元素序列。 應優先使用join方法而不是使用+來連線字串 >>>s1 = "-" >>>s2 = "" >>>seq =("r","u","n","o","o","b")# 字串序列 >>>print (s1.join( seq )) r-u-n-o-o-b >>>print (s2.join( seq )) runoob |
split (str="", num=string.count(str)) | 通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 引數 str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表符(\t)等。 num -- 分割次數。 join的逆方法 |
splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果引數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。 引數 keepends -- 在輸出結果裡是否去掉換行符('\r', '\r\n', \n'),預設為 False,不包含換行符,如果為 True,則保留換行符。 |
•
(8)正則表示式
Python 2.x與Python 3.x在支援Unicode方面的異同
• python允許處理unicode字串,加字首u或U, 如 u"thisis an unicode string"。
• unicode是信源編碼,對字符集數字化;utf8是通道編碼,為更好的儲存和傳輸。
• 不再有unicode型別
• str型別支援Unicode,或者說Python3.5中的str型別就相當於Python 2.7中的unicode型別
• Python 3.5的預設編碼是UTF-8