做自(zì)由與創造的先行者

Types: 6. Sequence Types — str, unicode, list, tuple, bytear

Python開(kāi)發手冊

6. Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange

有七種序列類型:字符串,Unicode字符串,列表,元組,字節數組,緩沖區(qū)和(hé)xrange對(duì)象。

對(duì)于其他(tā)容器,請(qǐng)參閱内置dict()和(hé)set()函數以及collections模塊。

字符串文(wén)字用(yòng)單引号或雙引号寫入:'xyzzy',"frobozz"。有關字符串文(wén)字的更多信息,請(qǐng)參閱字符串文(wén)字。Unicode字符串很(hěn)像字符串,但(dàn)是在語法中使用(yòng)前面的'u'字符指定:u'abc',u"def"。除了(le)這(zhè)裏描述的功能(néng)之外(wài),字符串方法部分中還描述了(le)特定于字符串的方法。列表用(yòng)方括号構成,用(yòng)逗号分隔項目:[a, b, c]。元組由逗号運算(suàn)符(不在方括号内)構造,帶或不帶括号括起來(lái),但(dàn)空(kōng)元組必須帶括号括起來(lái)的括号,如a, b, c或()。單個元組元組必須具有尾随逗号,例如(d,)。

Bytearray對(duì)象是使用(yòng)内置函數創建的bytearray()。

緩沖區(qū)對(duì)象不直接受Python語法支持,但(dàn)可以通過調用(yòng)内置函數來(lái)創建buffer()。他(tā)們不支持連接或重複。

xrange類型的對(duì)象類似于緩沖區(qū),因爲沒有特定的語法來(lái)創建它們,但(dàn)是它們是使用(yòng)xrange()函數創建的。它們不支持切片,串聯或重複使用(yòng)in,not in,min()或max()對(duì)它們是無效的。

大(dà)多數序列類型支持以下(xià)操作(zuò)。在in和(hé)not in操作(zuò)具有比較操作(zuò)相同的優先級。在+與*操作(zuò)具有相同的優先級對(duì)應的數字運算(suàn)。[3]爲可變序列類型提供了(le)其他(tā)方法。

此表列出按升序優先級排序的序列操作(zuò)。在表中,s和(hé)t是相同類型的序列; n,i和(hé)j是整數:

Operation

結果

筆(bǐ)記

x in s

如果s的項等于x,則爲真,否則爲False

(1)

x不在s中

假如一個s的項等于x,則爲假,否則爲真

(1)

s + t

s和(hé)t的連接

(6)

s * n,n * s

相當于将n次添加到(dào)自(zì)身

(2)

si

第s項,起源0

(3)

如果:J-

從(cóng)我到(dào)j的切片

(3)(4)

如果:J-ķ

從(cóng)步驟k的i到(dào)j的片段

(3)(5)

隻有(一)

s的長度

分鐘(zhōng))

s的最小(xiǎo)項

MAX(S)

最大(dà)的項目

s.index(x)的

s中第一次出現(xiàn)x的索引

s.count(x)的

s中出現(xiàn)x的總次數

序列類型也(yě)支持比較。具體來(lái)說,元組和(hé)列表通過比較相應的元素按字典順序進行比較。這(zhè)意味着爲了(le)比較相等,每個元素必須相等并且兩個序列必須是相同類型并具有相同長度。(有關完整的詳細信息,請(qǐng)參閱語言參考中的比較。)

Notes:

當s是一個字符串或Unicode字符串對(duì)象時(shí)in,not in操作(zuò)就像一個子串測試一樣。在2.3之前的Python版本中,x必須是長度爲1的字符串。在Python 2.3及更高(gāo)版本中,x可以是任意長度的字符串。

小(xiǎo)于n的值0被視(shì)爲0(其産生與s相同類型的空(kōng)序列)。請(qǐng)注意,序列中的項目不會(huì)被複制; 它們被多次引用(yòng)。這(zhè)經常困擾着新的Python程序員; 考慮:列表= [[]] * 3 >>>列表[[],[],[]] >>> lists0.append(3)>>>列表[3,3]發生了(le)什(shén)麽[[]]是一個包含一個空(kōng)列表的單元素列表,所以這(zhè)三個元素[[]] * 3都是對(duì)這(zhè)個單個空(kōng)列表的引用(yòng)。修改任何元素lists修改這(zhè)個單子列表。您可以通過這(zhè)種方式創建不同列表的列表:lists = [[] for i in range(3)] >>> lists0.append(3)>>> lists1.append(5)>>> lists2.append(7 )>>> lists [3,5,7]常見問題解答(dá)條目中提供了(le)進一步說明(míng)如何創建多維列表?。

如果i或j是負數,則該索引是相對(duì)于序列s的末尾:len(s) + i或被len(s) + j替換。但(dàn)請(qǐng)注意,-0依然如此0。

的切片小(xiǎo)号從(cóng)我到(dào)Ĵ被定義爲物品的具有索引序列ķ使得i <= k < j。如果我或j大(dà)于len(s),請(qǐng)使用(yòng)len(s)。如果我被省略或者None使用(yòng)0。如果省略了(le)j,或者None使用(yòng)len(s)。如果我大(dà)于或等于j,則切片爲空(kōng)。

步驟k中從(cóng)i到(dào)j的s片段被定義爲具有這(zhè)樣的索引的項目序列。換句話(huà)說,在指數,,,等等,停車時(shí)Ĵ達到(dào)(但(dàn)絕不包括Ĵ)。當k是正數時(shí),如果它們更大(dà),則i和(hé)j會(huì)減少。當k是負數時(shí),如果i和(hé)j更大(dà),則i和(hé)j減小(xiǎo)。如果我或j被省略或x = i + n*k0 <= n < (j-i)/kii+ki+2*ki+3*klen(s)len(s) - 1None,它們變成了(le)“終點”值(終點取決于k的符号)。請(qǐng)注意,k不能(néng)爲零。如果k是None,它被視(shì)爲像1。

CPython實現(xiàn)細節:如果s和(hé)t都是字符串,則一些(xiē)Python實現(xiàn)(例如CPython)通常可以爲窗體s = s + t或窗體的賦值執行就地優化s += t。如果适用(yòng),這(zhè)種優化使得二次運行時(shí)間不太可能(néng)。這(zhè)種優化是版本和(hé)實現(xiàn)相關的。對(duì)于性能(néng)敏感的代碼,最好(hǎo)使用(yòng)str.join()确保不同版本和(hé)實現(xiàn)之間一緻的線性級聯性能(néng)的方法。

在版本2.4中更改:以前,字符串連接從(cóng)來(lái)沒有發生過。

6.1。字符串方法

下(xià)面列出了(le)8位字符串和(hé)Unicode對(duì)象都支持的字符串方法。其中一些(xiē)也(yě)可用(yòng)于bytearray對(duì)象。

另外(wài),Python的字符串支持序列類型中描述的序列類型方法 - str,unicode,list,tuple,bytearray,buffer,xrange部分。要輸出格式化的字符串,請(qǐng)使用(yòng)%字符串格式操作(zuò)部分中描述的模闆字符串或運算(suàn)符。另請(qǐng)參閱re模塊,了(le)解基于正則表達式的字符串函數。

str.capitalize()

返回字符串的一個副本,其首字母大(dà)寫,其餘的小(xiǎo)寫。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.center(width[, fillchar])

返回以一個長度寬度的字符串爲中心。填充是使用(yòng)指定的fillchar完成的(默認爲空(kōng)格)。

在版本2.4中更改:支持fillchar參數。

str.count(sub[, start[, end]])

返回範圍start,end 中子串sub的非重疊次數。可選參數開(kāi)始和(hé)結束被解釋爲切片符号。

str.decode([encoding[, errors]])

使用(yòng)注冊編碼的編碼解碼器解碼字符串。編碼默認爲默認的字符串編碼。可能(néng)會(huì)給出錯誤來(lái)設置不同的錯誤處理(lǐ)方案。默認值是'strict',意味着編碼錯誤會(huì)增加UnicodeError。其他(tā)可能(néng)的值是'ignore','replace'并且通過注冊的任何其他(tā)名稱codecs.register_error(),請(qǐng)參見編解碼器基類。

2.2版本中的新功能(néng)。

在版本2.3中進行了(le)更改:添加了(le)對(duì)其他(tā)錯誤處理(lǐ)方案的支持。

在2.7版本中進行了(le)更改:添加了(le)對(duì)關鍵字參數的支持。

str.encode([encoding[, errors]])

返回字符串的編碼版本。默認編碼是當前的默認字符串編碼。可能(néng)會(huì)給出錯誤來(lái)設置不同的錯誤處理(lǐ)方案。錯誤的默認值是'strict',這(zhè)意味着編碼錯誤會(huì)引發一個錯誤UnicodeError。其他(tā)可能(néng)的值'ignore','replace','xmlcharrefreplace','backslashreplace'并通過注冊的任何其他(tā)名稱codecs.register_error(),請(qǐng)參見編解碼基礎類。有關可能(néng)的編碼列表,請(qǐng)參見标準編碼部分。

2.0版本中的新功能(néng)。

在版本2.3中進行了(le)更改:添加了(le)對(duì)'xmlcharrefreplace'和(hé)'backslashreplace'和(hé)其他(tā)錯誤處理(lǐ)方案的支持。

在2.7版本中進行了(le)更改:添加了(le)對(duì)關鍵字參數的支持。

str.endswith(suffix[, start[, end]])

返回True字符串是否與指定的結束後綴,否則返回False。後綴也(yě)可以是後綴的元組來(lái)查找。随着可選啓動,測試開(kāi)始在那個位置。選擇結束時(shí),停止在該位置進行比較。

在版本2.5中更改:接受元組作(zuò)爲後綴。

str.expandtabs([tabsize])

返回字符串的副本,其中所有制表符由一個或多個空(kōng)格替換,具體取決于當前列和(hé)給定制表符大(dà)小(xiǎo)。選項卡位置出現(xiàn)在每個制表符大(dà)小(xiǎo)字符中(默認值爲8,在列0,8,16等處提供制表位置)。要擴展字符串,當前列設置爲零,字符串逐個檢查。如果該字符是一個制表符(\t),則結果中會(huì)插入一個或多個空(kōng)格字符,直到(dào)當前列等于下(xià)一個制表符位置。(制表符本身不被複制。)如果該字符是換行符(\n)或返回(\r),它被複制并且當前列被重置爲零。任何其他(tā)字符都将被不變地複制,而當前列增加1,無論打印時(shí)字符如何表示。

>>> '01\t012\t0123\t01234'.expandtabs()

'01 012 0123 01234'

>>> '01\t012\t0123\t01234'.expandtabs(4)

'01 012 0123 01234'

複制

str.find(sub[, start[, end]])

返回切片中找到(dào)substring 子字符串的最低(dī)索引s[start:end]。可選參數開(kāi)始和(hé)結束被解釋爲切片符号。-1如果未找到(dào)子項,則返回。

注釋

find()隻有在您需要知(zhī)道(dào)sub的位置時(shí)才應該使用(yòng)該方法。要檢查sub是否是子字符串,請(qǐng)使用(yòng)in運算(suàn)符:

>>> 'Py' in 'Python'

True

複制

str.format(*args, **kwargs)

執行字符串格式化操作(zuò)。調用(yòng)此方法的字符串可以包含由大(dà)括号分隔的文(wén)本文(wén)本或替換字段{}。每個替換字段包含位置參數的數字索引或關鍵字參數的名稱。返回字符串的副本,其中每個替換字段将替換爲相應參數的字符串值。

>>> "The sum of 1 + 2 is {0}".format(1+2)

'The sum of 1 + 2 is 3'

複制

請(qǐng)參閱格式字符串語法以獲取可在格式字符串中指定的各種格式選項的說明(míng)。

這(zhè)種字符串格式化方法是Python 3中的新标準,應優先%于新代碼中字符串格式化操作(zuò)中描述的格式。

2.6版本中的新功能(néng)。

str.index(sub[, start[, end]])

就像find(),但(dàn)ValueError在沒有找到(dào)子字符串時(shí)引發。

str.isalnum()

如果字符串中的所有字符都是字母數字并且至少有一個字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.isalpha()

如果字符串中的所有字符都是字母并且至少有一個字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.isdigit()

如果字符串中的所有字符都是數字并且至少有一個字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.islower()

如果字符串中的所有套用(yòng)字符[4]都是小(xiǎo)寫,并且至少有一個套用(yòng)字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.isspace()

如果字符串中隻有空(kōng)格字符,并且至少有一個字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.istitle()

如果字符串是一個标題字符串并且至少有一個字符,則返回true,例如,大(dà)寫字符隻能(néng)跟在未寫入的字符之後,而小(xiǎo)寫字母隻能(néng)在已封裝的字符之後。否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.isupper()

如果字符串中的所有套用(yòng)字符[4]都是大(dà)寫且至少有一個套用(yòng)字符,則返回true,否則返回false。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.join(iterable)

返回一個字符串,它是可 叠代叠代中字符串的串聯。元素之間的分隔符是提供此方法的字符串。

str.ljust(width[, fillchar])

以長度寬度的字符串返回左對(duì)齊的字符串。填充是使用(yòng)指定的fillchar完成的(默認爲空(kōng)格)。如果寬度小(xiǎo)于或等于,則返回原始字符串len(s)。

在版本2.4中更改:支持fillchar參數。

str.lower()

返回字符串的一個副本,并将所有裝入字符的字符[4]轉換爲小(xiǎo)寫字母。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.lstrip([chars])

返回删除前導字符的字符串的副本。的字符參數是要除去的字符串指定的字符集。如果省略或者None,chars參數默認删除空(kōng)格。該字符參數不是前綴; 相反,其值的所有組合都被剝離:

>>> ' spacious '.lstrip()

'spacious '

>>> 'www.example.com'.lstrip('cmowz.')

'example.com'

複制

在版本2.2.2中更改:支持chars參數。

str.partition(sep)

在sep第一次出現(xiàn)時(shí)拆分字符串,并返回包含分隔符之前的部分,分隔符本身和(hé)分隔符之後的部分的三元組。如果未找到(dào)分隔符,則返回包含該字符串本身的三元組,然後返回兩個空(kōng)字符串。

2.5版本中的新功能(néng)。

str.replace(old, new[, count])

返回所有出現(xiàn)的舊字符串替換爲新字符串的副本。如果給出可選的參數計(jì)數,則僅替換第一個計(jì)數事(shì)件。

str.rfind(sub[, start[, end]])

返回找到(dào)substring 子字符串的最高(gāo)索引,這(zhè)樣sub就包含在其中s[start:end]。可選參數開(kāi)始和(hé)結束被解釋爲切片符号。返回-1失敗。

str.rindex(sub[, start[, end]])

像rfind()但(dàn)ValueError子字符串子未找到(dào)時(shí)引發。

str.rjust(width[, fillchar])

以字符串長度寬度返回右對(duì)齊的字符串。填充是使用(yòng)指定的fillchar完成的(默認爲空(kōng)格)。如果寬度小(xiǎo)于或等于,則返回原始字符串len(s)。

在版本2.4中更改:支持fillchar參數。

str.rpartition(sep)

在最後出現(xiàn)的sep處拆分字符串,并返回包含分隔符之前的部分,分隔符本身和(hé)分隔符之後的部分的三元組。如果未找到(dào)分隔符,則返回包含兩個空(kōng)字符串的三元組,然後返回字符串本身。

2.5版本中的新功能(néng)。

str.rsplit([sep[, maxsplit]])

使用(yòng)sep作(zuò)爲分隔符字符串,返回字符串中單詞的列表。如果給出maxsplit,則最多maxsplit分裂,最右邊的分裂。如果沒有指定sep或者None任何空(kōng)格字符串是分隔符。除了(le)從(cóng)右邊分開(kāi)外(wài),rsplit()其行爲split()如下(xià)所述。

2.4版本中的新功能(néng)。

str.rstrip([chars])

返回删除了(le)尾随字符的字符串副本。的字符參數是要除去的字符串指定的字符集。如果省略或者None,chars參數默認删除空(kōng)格。該字符參數不是後綴; 相反,其值的所有組合都被剝離:

>>> ' spacious '.rstrip()

' spacious'

>>> 'mississippi'.rstrip('ipz')

'mississ'

複制

在版本2.2.2中更改:支持chars參數。

str.split([sep[, maxsplit]])

使用(yòng)sep作(zuò)爲分隔符字符串,返回字符串中單詞的列表。如果給出maxsplit,最多可以完成maxsplit分割(因此,列表最多隻有maxsplit+1元素)。如果未指定maxsplit或者-1,則分割數量沒有限制(所有可能(néng)的分割)。

如果給出了(le)sep,則連續分隔符不會(huì)分組在一起,并被視(shì)爲分隔空(kōng)字符串(例如,'1,,2'.split(',')返回['1', '', '2'])。該月的參數可以由多個字符(例如,'1<>2<>3'.split('<>')返回['1', '2', '3'])。用(yòng)指定的分隔符分割空(kōng)字符串返回['']。

如果未指定sep或is None,則應用(yòng)不同的分割算(suàn)法:将連續空(kōng)白(bái)的運行視(shì)爲單個分隔符,并且如果字符串具有前導或尾随空(kōng)白(bái),則結果的開(kāi)始或結束将不包含空(kōng)字符串。因此,用(yòng)None分隔符分隔一個空(kōng)字符串或一個隻包含空(kōng)格的字符串會(huì)返回[]。

例如,' 1 2 3 '.split()返回['1', '2', '3']并' 1 2 3 '.split(None, 1)返回['1', '2 3 ']。

str.splitlines([keepends])

返回字符串中行的列表,在行邊界處突破。此方法使用(yòng)通用(yòng)換行符方法來(lái)分割線條。除非換行符不包括在結果列表中keepends,并給出正确的。

Python的認識"\r","\n"以及"\r\n"作(zuò)爲邊界線爲8位字符串。

例如:

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()

['ab c', '', 'de fg', 'kl']

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(True)

['ab c\n', '\n', 'de fg\r', 'kl\r\n']

複制

與給定split()分隔符字符串sep時(shí)不同,此方法返回空(kōng)字符串的空(kōng)列表,并且終端行分隔符不會(huì)導緻多餘的行:

>>> "".splitlines()

[]

>>> "One line\n".splitlines()

['One line']

複制

爲了(le)比較,split('\n')給出:

>>> ''.split('\n')

['']

>>> 'Two lines\n'.split('\n')

['Two lines', '']

複制

unicode.splitlines([keepends])

返回字符串中的行列表,如str.splitlines()。但(dàn)是,Unicode方法在以下(xià)行邊界上(shàng)分割,這(zhè)些(xiē)行邊界是8位字符串識别的通用(yòng)換行符的超集。

表示

描述

\ n

換行

\ r

回車

\ r \ n

回車+換行

\ v或\ x0b

線條制表

\ f或\ x0c

換頁

\ X1C

文(wén)件分隔符

\ X1D

組分隔符

\ x1e

記錄分隔符

\ x85

下(xià)一行(C1控制代碼)

\ u2028

線分隔符

\ u2029

段落分隔符

在版本2.7中更改:\v并\f添加到(dào)行邊界列表中。

str.startswith(prefix[, start[, end]])

返回True字符串是否與開(kāi)始前綴,否則返回False。前綴也(yě)可以是要查找的前綴元組。使用(yòng)可選啓動,測試字符串從(cóng)該位置開(kāi)始。使用(yòng)可選結束時(shí),停止在該位置比較字符串。

在版本2.5中更改:接受元組作(zuò)爲前綴。

str.strip([chars])

返回删除前導字符和(hé)尾随字符的字符串副本。的字符參數是要除去的字符串指定的字符集。如果省略或者None,chars參數默認删除空(kōng)格。該字符參數不是前綴或後綴; 相反,其值的所有組合都被剝離:

>>> ' spacious '.strip()

'spacious'

>>> 'www.example.com'.strip('cmowz.')

'example'

複制

在版本2.2.2中更改:支持chars參數。

str.swapcase()

返回大(dà)寫字符轉換爲小(xiǎo)寫字符串的副本,反之亦然。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.title()

返回字符串的字幕版本,其中字以大(dà)寫字符開(kāi)頭,其餘字符爲小(xiǎo)寫字母。

該算(suàn)法使用(yòng)簡單的與語言無關的單詞作(zuò)爲連續字母組的定義。該定義在許多情況下(xià)都有效,但(dàn)這(zhè)意味着收縮和(hé)占有者中的撇号會(huì)形成單詞邊界,這(zhè)可能(néng)不是理(lǐ)想的結果:

>>> "they're bill's friends from the UK".title()

"They'Re Bill'S Friends From The Uk"

複制

可以使用(yòng)正則表達式構造撇号的解決方法:

>>> import re

>>> def titlecase(s):

... return re.sub(r"[A-Za-z]+('[A-Za-z]+)?",

... lambda mo: mo.group(0)[0].upper() +

... mo.group(0)[1:].lower(),

... s)

...

>>> titlecase("they're bill's friends.")

"They're Bill's Friends."

複制

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.translate(table[, deletechars])

返回删除可選參數deletechars中出現(xiàn)的所有字符的字符串副本,其餘字符已通過給定的轉換表映射,該轉換表必須是長度爲256的字符串。

您可以使用(yòng)模塊中的maketrans()幫助器功能(néng)string來(lái)創建轉換表。對(duì)于字符串對(duì)象,請(qǐng)将表參數設置None爲僅用(yòng)于删除字符的翻譯:

>>> 'read this short text'.translate(None, 'aeiou')

'rd ths shrt txt'

複制

2.6版新增功能(néng):支持None 表格參數。

對(duì)于Unicode對(duì)象,該translate()方法不接受可選的deletechars參數。相反,它會(huì)返回一個s的副本,其中所有字符已經通過給定的轉換表映射,該表必須是Unicode序号到(dào)Unicode序号,Unicode字符串或None。未映射的字符保持不變。映射到(dào)的字符None被删除。請(qǐng)注意,更靈活的方法是使用(yòng)codecs模塊創建自(zì)定義字符映射編解碼器(請(qǐng)參閱encodings.cp1251示例)。

str.upper()

返回字符串的一個副本,并将所有裝入字符的字符[4]轉換爲大(dà)寫字符。請(qǐng)注意,str.upper().isupper()可能(néng)是False如果s包含無套管的字符或如果所得到(dào)的字符(縣)的Unicode類别不是“呂氏春秋”(字母,大(dà)寫),但(dàn)如“LT”(字母,首字母大(dà)寫)。

對(duì)于8位字符串,此方法是區(qū)域設置相關的。

str.zfill(width)

返回長度寬度字符串中填充零的數字字符串。符号前綴處理(lǐ)正确。如果寬度小(xiǎo)于或等于,則返回原始字符串len(s)。

New in version 2.2.2.

以下(xià)方法僅出現(xiàn)在unicode對(duì)象上(shàng):

unicode.isnumeric()

True如果S中隻有數字字符則返回,False否則返回。數字字符包括數字字符和(hé)具有Unicode數值屬性的所有字符,例如U + 2155,VULGAR FRACTION ONE FIFTH。

unicode.isdecimal()

True如果S中隻有十進制字符則返回,False否則返回。十進制字符包括數字字符以及可用(yòng)于形成十進制小(xiǎo)數數字的所有字符,例如U + 0660,ARABIC-INDIC DIGIT ZERO。

6.2。字符串格式化操作(zuò)

字符串和(hé)Unicode對(duì)象有一個獨特的内置操作(zuò):%操作(zuò)符(模)。這(zhè)也(yě)被稱爲字符串格式化或插值運算(suàn)符。鑒于format % values(其中格式是字符串或Unicode對(duì)象),格式中的%轉換規範将替換爲零個或多個值元素。其效果與使用(yòng)C語言相似。如果format是一個Unicode對(duì)象,或者使用(yòng)該轉換轉換的任何對(duì)象都是Unicode對(duì)象,則結果也(yě)将是一個Unicode對(duì)象。sprintf()%s

如果格式需要單個參數,則值可能(néng)是單個非元組對(duì)象。[5]否則,值必須是具有由格式字符串或單個映射對(duì)象(例如字典)指定的項目數量的元組。

轉換說明(míng)符包含兩個或多個字符,并具有以下(xià)組件,它們必須按以下(xià)順序出現(xiàn):

該'%'字符表示說明(míng)符的開(kāi)始。

映射鍵(可選),由括号括起來(lái)的字符序列組成(例如(somename))。

轉換标志(可選),影響某些(xiē)轉換類型的結果。

最小(xiǎo)字段寬度(可選)。如果指定爲'*'(星号),則将從(cóng)元組的下(xià)一個元素值中讀取實際寬度,并且要轉換的對(duì)象位于最小(xiǎo)字段寬度和(hé)可選精度之後。

精度(可選),以'.'(點)形式給出,然後是精度。如果指定爲'*'(星号),則将從(cóng)元組的下(xià)一個元素的值中讀取實際寬度,并且要轉換的值位于精度之後。

長度修飾符(可選)。

轉換類型。

當正确的參數是一個字典(或其他(tā)映射類型)時(shí),字符串中的格式必須在字符後面插入一個帶括号的映射關鍵字'%'。映射鍵從(cóng)映射中選擇要格式化的值。例如:

>>> print '%(language)s has %(number)03d quote types.' % \

... {"language": "Python", "number": 2}

Python has 002 quote types.

複制

在這(zhè)種情況下(xià)*,格式中不會(huì)出現(xiàn)說明(míng)符(因爲它們需要一個連續的參數列表)。

轉換标志字符是:

标志

含義

'#'

值轉換将使用(yòng)“替代形式”(下(xià)面定義)。

'0'

轉換将爲數字值填充零。

'-'

轉換後的值将保持調整狀态(如果兩者都被賦予,将覆蓋'0'轉換)。

' '

(一個空(kōng)格)在由正确的數字(或空(kōng)字符串)産生的一個空(kōng)白(bái)應該留下(xià)一個有符号的轉換。

'+'

符号字符('+'或' - ')将在轉換之前(覆蓋“空(kōng)格”标志)。

長度修飾符(h,l或L)可能(néng)存在,但(dàn)會(huì)被忽略,因爲它對(duì)于Python不是必需的 - 例如與之%ld相同%d。

轉換類型是:

轉變

含義

筆(bǐ)記

'd'

帶符号的整數小(xiǎo)數。

'一世'

帶符号的整數小(xiǎo)數。

這(zhè)個

簽署八進制值。

(1)

“在”

已過時(shí)的類型 - 與“d”相同。

(7)

'X'

簽名的十六進制(小(xiǎo)寫)。

(2)

'X'

簽名的十六進制(大(dà)寫)。

(2)

“與”

浮點指數格式(小(xiǎo)寫)。

(3)

'E'

浮點指數格式(大(dà)寫)。

(3)

'F'

浮點十進制格式。

(3)

'F'

浮點十進制格式。

(3)

'G'

浮點格式。如果指數小(xiǎo)于-4或小(xiǎo)于精度,則使用(yòng)小(xiǎo)寫指數格式,否則使用(yòng)小(xiǎo)數格式。

(4)

'G'

浮點格式。如果指數小(xiǎo)于-4或者不小(xiǎo)于精度,則使用(yòng)大(dà)寫指數格式,否則使用(yòng)小(xiǎo)數格式。

(4)

'C'

單個字符(接受整數或單個字符串)。

'R'

String(使用(yòng)repr()轉換任何Python對(duì)象)。

(5)

'S'

字符串(使用(yòng)str()轉換任何Python對(duì)象)。

(6)

'%'

沒有參數被轉換,結果爲'%'字符。

注釋:

'0'如果結果的前導字符不是零,則替換形式将導緻在左側填充和(hé)數字格式之間插入前導零()。

替代形式會(huì)導緻在第一個數字之前插入'0x'或'0X'取決于是否使用(yòng)了(le)'x'或'X'格式。

替代形式會(huì)導緻結果始終包含小(xiǎo)數點,即使沒有數字跟着它。精度決定小(xiǎo)數點後的位數,默認爲6。

替代形式導緻結果始終包含小(xiǎo)數點,并且尾部零不會(huì)像原本那樣被删除。精度決定小(xiǎo)數點前後的有效位數,默認值爲6。

該%r轉換是在Python 2.0中添加的。精度決定了(le)使用(yòng)的字符的最大(dà)數量。

如果提供的對(duì)象或格式是一個unicode字符串,則結果字符串也(yě)是unicode。精度決定了(le)使用(yòng)的字符的最大(dà)數量。

見PEP 237。

由于Python字符串具有明(míng)确的長度,因此%s轉換不會(huì)假定'\0'字符串的末尾。

在版本2.7中進行了(le)更改:%f絕對(duì)值超過1e50的數字轉換不再被%g轉換替代。

附加的字符串操作(zuò)在标準模塊中定義string和(hé)re。

6.3。XRange類型

該xrange類型是一種常用(yòng)于循環的不可變序列。該xrange類型的優點是xrange對(duì)象總是會(huì)占用(yòng)相同數量的内存,而不管它所代表的範圍的大(dà)小(xiǎo)。沒有一緻的性能(néng)優勢。

XRange對(duì)象的行爲很(hěn)少:它們隻支持索引,叠代和(hé)len()函數。

6.4。可變序列類型

列表和(hé)bytearray對(duì)象支持允許就地修改對(duì)象的其他(tā)操作(zuò)。其他(tā)可變序列類型(添加到(dào)語言中時(shí))也(yě)應該支持這(zhè)些(xiē)操作(zuò)。字符串和(hé)元組是不可變的序列類型:一旦創建,這(zhè)些(xiē)對(duì)象就不能(néng)被修改。以下(xià)操作(zuò)定義在可變序列類型上(shàng)(其中x是任意對(duì)象):

手術

結果

筆(bǐ)記

if = x

s的項目i被x替換

如果:j = t

從(cóng)i到(dào)j的片段由可叠代的t的内容替換

del si:j

相同,如果:j = []

如果:j:k = t

si:j:k的元素被t的元素替換

(1)

del if:j:k

從(cóng)列表中删除si:j:k的元素

s.append(x)的

與slen(s)相同:len(s)= x

(2)

s.extend(t)或s + = t

大(dà)部分與slen(s)相同:len(s)= t

(3)

s * = n

将其内容重複n次更新

(11)

s.count(x)的

返回i的數量爲si == x

s.index(x [,i,j])

返回最小(xiǎo)的k,使得sk == x和(hé)i <= k <j

(4)

s.insert(i,x)

相同:i = x

(5)

s.pop(ⅰ)

與x = if相同; 德爾斯; 返回x

(6)

s.remove(x)的

與del ss.index(x)相同

(4)

s.reverse()

反轉s的項目到(dào)位

(7)

s.sort([cmp [,key,reverse]])

對(duì)s的項目進行排序

(7)(8)(9)(10)

注釋:

t必須與它正在替換的切片具有相同的長度。

Python的C實現(xiàn)在曆史上(shàng)接受了(le)多個參數,并将它們隐式地加入到(dào)一個元組中; 這(zhè)不再适用(yòng)于Python 2.0。自(zì)從(cóng)Python 1.4以來(lái),這(zhè)種錯誤的使用(yòng)已被廢棄。

t可以是任何可叠代的對(duì)象。

在s中未找到(dào)xValueError時(shí)引發。當負方向索引作(zuò)爲方法的第二個或第三個參數傳遞時(shí),與切片索引相同,将添加列表長度。如果它仍然是負數,就像截面索引一樣截斷爲零。在版本2.3中更改:以前,沒有用(yòng)于指定開(kāi)始和(hé)停止位置的參數。index()index()

如果将負向索引作(zuò)爲方法的第一個參數傳遞,則會(huì)像insert()添加切片索引一樣添加列表長度。如果它仍然是負數,就像截面索引一樣截斷爲零。在版本2.3中更改:以前,所有負指數都被截斷爲零。

該pop()方法的可選參數我默認爲-1,所以默認情況下(xià)最後一項被删除并返回。

在排序或倒排大(dà)型列表時(shí),sort()和(hé)reverse()方法會(huì)修改列表以實現(xiàn)空(kōng)間節約。爲了(le)提醒您,他(tā)們以副作(zuò)用(yòng)的方式操作(zuò),他(tā)們不會(huì)返回排序或颠倒的列表。

該sort()方法采用(yòng)可選參數來(lái)控制比較。 cmp指定兩個參數(列表項)的自(zì)定義比較函數,它應該返回一個負數,零或正數,具體取決于第一個參數是否小(xiǎo)于,等于或大(dà)于第二個參數:cmp=lambda x,y: cmp(x.lower(), y.lower())。默認值是None。 key指定一個用(yòng)于從(cóng)每個列表元素中提取比較鍵的參數的函數:key=str.lower。默認值是None。 reverse是一個布爾值。如果設置爲True,則列表元素按照每個比較被颠倒的順序進行排序。一般來(lái)說,關鍵和(hé)反向轉換過程比指定等效的cmp函數要快(kuài)得多。這(zhè)是因爲對(duì)于每個列表元素,cmp被多次調用(yòng),而按鍵和(hé)反向觸摸每個元素隻有一次。用(yòng)functools.cmp_to_key()一個老(lǎo)式的轉換CMP功能(néng)的關鍵功能(néng)。在版本2.3中進行了(le)更改:添加None了(le)對(duì)等效于省略cmp的支持。

在版本2.4中進行了(le)更改:添加了(le)對(duì)密鑰和(hé)反向的支持。

從(cóng)Python 2.3開(kāi)始,該sort()方法保證穩定。如果确保不會(huì)更改比較相等的元素的相對(duì)順序,則排序是穩定的 - 這(zhè)對(duì)于多次排序(例如,按部門(mén)排序,然後按薪級)進行排序很(hěn)有幫助。

CPython實現(xiàn)細節:列表正在排序時(shí),嘗試對(duì)列表進行更改或甚至檢查的影響是未定義的。Python 2.3和(hé)更新版本的C實現(xiàn)使得列表在持續時(shí)間内顯示爲空(kōng),并且ValueError如果它能(néng)夠檢測列表在排序過程中發生了(le)變異,則引發該列表。

值n是一個整數或實現(xiàn)的對(duì)象__index__()。n的零和(hé)負值清除序列。序列中的項目不會(huì)被複制; 它們被多次引用(yòng),如s * n序列類型 - str,unicode,list,tuple,bytearray,buffer,xrange中所解釋的。

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Types: 7. Set Types — set, frozenset
上(shàng)一篇:Types: 5. Iterator Types