6. Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange
有七種序列類型:字符串,Unicode字符串,列表,元組,字節數(shù)組,緩沖區(qū)和(hé)xrange對象。
對于其他(tā)容器,請(qǐng)參閱內(nèi)置dict()和(hé)set()函數(shù)以及collections模塊。
字符串文字用單引号或雙引号寫入:'xyzzy',"frobozz"。有關字符串文字的更多信息,請(qǐng)參閱字符串文字。Unicode字符串很(hěn)像字符串,但(dàn)是在語法中使用前面的'u'字符指定:u'abc',u"def"。除了(le)這(zhè)裏描述的功能(néng)之外(wài),字符串方法部分中還描述了(le)特定于字符串的方法。列表用方括号構成,用逗号分隔項目:[a, b, c]。元組由逗号運算符(不在方括号內(nèi))構造,帶或不帶括号括起來,但(dàn)空元組必須帶括号括起來的括号,如(rú)a, b, c或()。單個元組元組必須具有尾随逗号,例如(rú)(d,)。
Bytearray對象是使用內(nèi)置函數(shù)創建的bytearray()。
緩沖區(qū)對象不直接受Python語法支持,但(dàn)可(kě)以通(tōng)過調用內(nèi)置函數(shù)來創建buffer()。他(tā)們不支持連接或重複。
xrange類型的對象類似于緩沖區(qū),因為(wèi)沒有特定的語法來創建它們,但(dàn)是它們是使用xrange()函數(shù)創建的。它們不支持切片,串聯或重複使用in,not in,min()或max()對它們是無效的。
大多數(shù)序列類型支持以下(xià)操作(zuò)。在in和(hé)not in操作(zuò)具有比較操作(zuò)相同的優先級。在+與*操作(zuò)具有相同的優先級對應的數(shù)字運算。[3]為(wèi)可(kě)變序列類型提供了(le)其他(tā)方法。
此表列出按升序優先級排序的序列操作(zuò)。在表中,s和(hé)t是相同類型的序列; n,i和(hé)j是整數(shù):
Operation | 結果 | 筆(bǐ)記 |
---|---|---|
x in s | 如(rú)果s的項等于x,則為(wèi)真,否則為(wèi)False | (1) |
x不在s中 | 假如(rú)一(yī)個s的項等于x,則為(wèi)假,否則為(wèi)真 | (1) |
s + t | s和(hé)t的連接 | (6) |
s * n,n * s | 相當于将n次添加到自(zì)身 | (2) |
si | 第s項,起源0 | (3) |
如(rú)果:J- | 從(cóng)我到j的切片 | (3)(4) |
如(rú)果:J-ķ | 從(cóng)步驟k的i到j的片段 | (3)(5) |
隻有(一(yī)) | s的長(cháng)度 | |
分鐘(zhōng)) | s的最小項 | |
MAX(S) | 最大的項目 | |
s.index(x)的 | s中第一(yī)次出現x的索引 | |
s.count(x)的 | s中出現x的總次數(shù) | |
序列類型也支持比較。具體來說,元組和(hé)列表通(tōng)過比較相應的元素按字典順序進行(xíng)比較。這(zhè)意味着為(wèi)了(le)比較相等,每個元素必須相等并且兩個序列必須是相同類型并具有相同長(cháng)度。(有關完整的詳細信息,請(qǐng)參閱語言參考中的比較。)
Notes:
當s是一(yī)個字符串或Unicode字符串對象時(shí)in,not in操作(zuò)就像一(yī)個子串測試一(yī)樣。在2.3之前的Python版本中,x必須是長(cháng)度為(wèi)1的字符串。在Python 2.3及更高版本中,x可(kě)以是任意長(cháng)度的字符串。
小于n的值0被視(shì)為(wèi)0(其産生與s相同類型的空序列)。請(qǐng)注意,序列中的項目不會被複制; 它們被多次引用。這(zhè)經常困擾着新的Python程序員(yuán); 考慮:列表= [[]] * 3 >>>列表[[],[],[]] >>> lists0.append(3)>>>列表[3,3]發生了(le)什麽[[]]是一(yī)個包含一(yī)個空列表的單元素列表,所以這(zhè)三個元素[[]] * 3都(dōu)是對這(zhè)個單個空列表的引用。修改任何元素lists修改這(zhè)個單子列表。您可(kě)以通(tōng)過這(zhè)種方式創建不同列表的列表:lists = [[] for i in range(3)] >>> lists0.append(3)>>> lists1.append(5)>>> lists2.append(7 )>>> lists [3,5,7]常見(jiàn)問(wèn)題解答(dá)條目中提供了(le)進一(yī)步說明(míng)如(rú)何創建多維列表?。
如(rú)果i或j是負數(shù),則該索引是相對于序列s的末尾:len(s) + i或被len(s) + j替換。但(dàn)請(qǐng)注意,-0依然如(rú)此0。
的切片小号從(cóng)我到Ĵ被定義為(wèi)物(wù)品的具有索引序列ķ使得i <= k < j。如(rú)果我或j大于len(s),請(qǐng)使用len(s)。如(rú)果我被省略或者None使用0。如(rú)果省略了(le)j,或者None使用len(s)。如(rú)果我大于或等于j,則切片為(wèi)空。
步驟k中從(cóng)i到j的s片段被定義為(wèi)具有這(zhè)樣的索引的項目序列。換句話說,在指數(shù),,,等等,停車時(shí)Ĵ達到(但(dàn)絕不包括Ĵ)。當k是正數(shù)時(shí),如(rú)果它們更大,則i和(hé)j會減少(shǎo)。當k是負數(shù)時(shí),如(rú)果i和(hé)j更大,則i和(hé)j減小。如(rú)果我或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)為(wèi)零。如(rú)果k是None,它被視(shì)為(wèi)像1。
CPython實現細節:如(rú)果s和(hé)t都(dōu)是字符串,則一(yī)些Python實現(例如(rú)CPython)通(tōng)常可(kě)以為(wèi)窗體s = s + t或窗體的賦值執行(xíng)就地(dì)優化s += t。如(rú)果适用,這(zhè)種優化使得二次運行(xíng)時(shí)間(jiān)不太可(kě)能(néng)。這(zhè)種優化是版本和(hé)實現相關的。對于性能(néng)敏感的代碼,最好使用str.join()确保不同版本和(hé)實現之間(jiān)一(yī)緻的線性級聯性能(néng)的方法。
在版本2.4中更改:以前,字符串連接從(cóng)來沒有發生過。
6.1。字符串方法
下(xià)面列出了(le)8位字符串和(hé)Unicode對象都(dōu)支持的字符串方法。其中一(yī)些也可(kě)用于bytearray對象。
另外(wài),Python的字符串支持序列類型中描述的序列類型方法 - str,unicode,list,tuple,bytearray,buffer,xrange部分。要(yào)輸出格式化的字符串,請(qǐng)使用%字符串格式操作(zuò)部分中描述的模闆字符串或運算符。另請(qǐng)參閱re模塊,了(le)解基于正則表達式的字符串函數(shù)。
str.capitalize()
返回字符串的一(yī)個副本,其首字母大寫,其餘的小寫。
對于8位字符串,此方法是區(qū)域設置相關的。
str.center(width[, fillchar])
返回以一(yī)個長(cháng)度寬度的字符串為(wèi)中心。填充是使用指定的fillchar完成的(默認為(wèi)空格)。
在版本2.4中更改:支持fillchar參數(shù)。
str.count(sub[, start[, end]])
返回範圍start,end 中子串sub的非重疊次數(shù)。可(kě)選參數(shù)開(kāi)始和(hé)結束被解釋為(wèi)切片符号。
str.decode([encoding[, errors]])
使用注冊編碼的編碼解碼器解碼字符串。編碼默認為(wèi)默認的字符串編碼。可(kě)能(néng)會給出錯誤來設置不同的錯誤處理方案。默認值是'strict',意味着編碼錯誤會增加UnicodeError。其他(tā)可(kě)能(néng)的值是'ignore','replace'并且通(tōng)過注冊的任何其他(tā)名稱codecs.register_error(),請(qǐng)參見(jiàn)編解碼器基類。
2.2版本中的新功能(néng)。
在版本2.3中進行(xíng)了(le)更改:添加了(le)對其他(tā)錯誤處理方案的支持。
在2.7版本中進行(xíng)了(le)更改:添加了(le)對關鍵字參數(shù)的支持。
str.encode([encoding[, errors]])
返回字符串的編碼版本。默認編碼是當前的默認字符串編碼。可(kě)能(néng)會給出錯誤來設置不同的錯誤處理方案。錯誤的默認值是'strict',這(zhè)意味着編碼錯誤會引發一(yī)個錯誤UnicodeError。其他(tā)可(kě)能(néng)的值'ignore','replace','xmlcharrefreplace','backslashreplace'并通(tōng)過注冊的任何其他(tā)名稱codecs.register_error(),請(qǐng)參見(jiàn)編解碼基礎類。有關可(kě)能(néng)的編碼列表,請(qǐng)參見(jiàn)标準編碼部分。
2.0版本中的新功能(néng)。
在版本2.3中進行(xíng)了(le)更改:添加了(le)對'xmlcharrefreplace'和(hé)'backslashreplace'和(hé)其他(tā)錯誤處理方案的支持。
在2.7版本中進行(xíng)了(le)更改:添加了(le)對關鍵字參數(shù)的支持。
str.endswith(suffix[, start[, end]])
返回True字符串是否與指定的結束後綴,否則返回False。後綴也可(kě)以是後綴的元組來查找。随着可(kě)選啓動,測試開(kāi)始在那(nà)個位置。選擇結束時(shí),停止在該位置進行(xíng)比較。
在版本2.5中更改:接受元組作(zuò)為(wèi)後綴。
str.expandtabs([tabsize])
返回字符串的副本,其中所有制表符由一(yī)個或多個空格替換,具體取決于當前列和(hé)給定制表符大小。選項卡位置出現在每個制表符大小字符中(默認值為(wèi)8,在列0,8,16等處提供制表位置)。要(yào)擴展字符串,當前列設置為(wèi)零,字符串逐個檢查。如(rú)果該字符是一(yī)個制表符(\t),則結果中會插入一(yī)個或多個空格字符,直到當前列等于下(xià)一(yī)個制表符位置。(制表符本身不被複制。)如(rú)果該字符是換行(xíng)符(\n)或返回(\r),它被複制并且當前列被重置為(wèi)零。任何其他(tā)字符都(dōu)将被不變地(dì)複制,而當前列增加1,無論打印時(shí)字符如(rú)何表示。
>>> '01\t012\t0123\t01234'.expandtabs()
'01 012 0123 01234'
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01 012 0123 01234'
複制
str.find(sub[, start[, end]])
返回切片中找到substring 子字符串的最低(dī)索引s[start:end]。可(kě)選參數(shù)開(kāi)始和(hé)結束被解釋為(wèi)切片符号。-1如(rú)果未找到子項,則返回。
注釋
find()隻有在您需要(yào)知道(dào)sub的位置時(shí)才應該使用該方法。要(yào)檢查sub是否是子字符串,請(qǐng)使用in運算符:
>>> 'Py' in 'Python'
True
複制
str.format(*args, **kwargs)
執行(xíng)字符串格式化操作(zuò)。調用此方法的字符串可(kě)以包含由大括号分隔的文本文本或替換字段{}。每個替換字段包含位置參數(shù)的數(shù)字索引或關鍵字參數(shù)的名稱。返回字符串的副本,其中每個替換字段将替換為(wèi)相應參數(shù)的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
複制
請(qǐng)參閱格式字符串語法以獲取可(kě)在格式字符串中指定的各種格式選項的說明(míng)。
這(zhè)種字符串格式化方法是Python 3中的新标準,應優先%于新代碼中字符串格式化操作(zuò)中描述的格式。
2.6版本中的新功能(néng)。
str.index(sub[, start[, end]])
就像find(),但(dàn)ValueError在沒有找到子字符串時(shí)引發。
str.isalnum()
如(rú)果字符串中的所有字符都(dōu)是字母數(shù)字并且至少(shǎo)有一(yī)個字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.isalpha()
如(rú)果字符串中的所有字符都(dōu)是字母并且至少(shǎo)有一(yī)個字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.isdigit()
如(rú)果字符串中的所有字符都(dōu)是數(shù)字并且至少(shǎo)有一(yī)個字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.islower()
如(rú)果字符串中的所有套用字符[4]都(dōu)是小寫,并且至少(shǎo)有一(yī)個套用字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.isspace()
如(rú)果字符串中隻有空格字符,并且至少(shǎo)有一(yī)個字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.istitle()
如(rú)果字符串是一(yī)個标題字符串并且至少(shǎo)有一(yī)個字符,則返回true,例如(rú),大寫字符隻能(néng)跟在未寫入的字符之後,而小寫字母隻能(néng)在已封裝的字符之後。否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.isupper()
如(rú)果字符串中的所有套用字符[4]都(dōu)是大寫且至少(shǎo)有一(yī)個套用字符,則返回true,否則返回false。
對于8位字符串,此方法是區(qū)域設置相關的。
str.join(iterable)
返回一(yī)個字符串,它是可(kě) 叠代叠代中字符串的串聯。元素之間(jiān)的分隔符是提供此方法的字符串。
str.ljust(width[, fillchar])
以長(cháng)度寬度的字符串返回左對齊的字符串。填充是使用指定的fillchar完成的(默認為(wèi)空格)。如(rú)果寬度小于或等于,則返回原始字符串len(s)。
在版本2.4中更改:支持fillchar參數(shù)。
str.lower()
返回字符串的一(yī)個副本,并将所有裝入字符的字符[4]轉換為(wèi)小寫字母。
對于8位字符串,此方法是區(qū)域設置相關的。
str.lstrip([chars])
返回删除前導字符的字符串的副本。的字符參數(shù)是要(yào)除去的字符串指定的字符集。如(rú)果省略或者None,chars參數(shù)默認删除空格。該字符參數(shù)不是前綴; 相反,其值的所有組合都(dōu)被剝離:
>>> ' spacious '.lstrip()
'spacious '
>>> 'www.example.com'.lstrip('cmowz.')
'example.com'
複制
在版本2.2.2中更改:支持chars參數(shù)。
str.partition(sep)
在sep第一(yī)次出現時(shí)拆分字符串,并返回包含分隔符之前的部分,分隔符本身和(hé)分隔符之後的部分的三元組。如(rú)果未找到分隔符,則返回包含該字符串本身的三元組,然後返回兩個空字符串。
2.5版本中的新功能(néng)。
str.replace(old, new[, count])
返回所有出現的舊(jiù)字符串替換為(wèi)新字符串的副本。如(rú)果給出可(kě)選的參數(shù)計數(shù),則僅替換第一(yī)個計數(shù)事件。
str.rfind(sub[, start[, end]])
返回找到substring 子字符串的最高索引,這(zhè)樣sub就包含在其中s[start:end]。可(kě)選參數(shù)開(kāi)始和(hé)結束被解釋為(wèi)切片符号。返回-1失敗。
str.rindex(sub[, start[, end]])
像rfind()但(dàn)ValueError子字符串子未找到時(shí)引發。
str.rjust(width[, fillchar])
以字符串長(cháng)度寬度返回右對齊的字符串。填充是使用指定的fillchar完成的(默認為(wèi)空格)。如(rú)果寬度小于或等于,則返回原始字符串len(s)。
在版本2.4中更改:支持fillchar參數(shù)。
str.rpartition(sep)
在最後出現的sep處拆分字符串,并返回包含分隔符之前的部分,分隔符本身和(hé)分隔符之後的部分的三元組。如(rú)果未找到分隔符,則返回包含兩個空字符串的三元組,然後返回字符串本身。
2.5版本中的新功能(néng)。
str.rsplit([sep[, maxsplit]])
使用sep作(zuò)為(wèi)分隔符字符串,返回字符串中單詞的列表。如(rú)果給出maxsplit,則最多maxsplit分裂,最右邊的分裂。如(rú)果沒有指定sep或者None任何空格字符串是分隔符。除了(le)從(cóng)右邊分開(kāi)外(wài),rsplit()其行(xíng)為(wèi)split()如(rú)下(xià)所述。
2.4版本中的新功能(néng)。
str.rstrip([chars])
返回删除了(le)尾随字符的字符串副本。的字符參數(shù)是要(yào)除去的字符串指定的字符集。如(rú)果省略或者None,chars參數(shù)默認删除空格。該字符參數(shù)不是後綴; 相反,其值的所有組合都(dōu)被剝離:
>>> ' spacious '.rstrip()
' spacious'
>>> 'mississippi'.rstrip('ipz')
'mississ'
複制
在版本2.2.2中更改:支持chars參數(shù)。
str.split([sep[, maxsplit]])
使用sep作(zuò)為(wèi)分隔符字符串,返回字符串中單詞的列表。如(rú)果給出maxsplit,最多可(kě)以完成maxsplit分割(因此,列表最多隻有maxsplit+1元素)。如(rú)果未指定maxsplit或者-1,則分割數(shù)量沒有限制(所有可(kě)能(néng)的分割)。
如(rú)果給出了(le)sep,則連續分隔符不會分組在一(yī)起,并被視(shì)為(wèi)分隔空字符串(例如(rú),'1,,2'.split(',')返回['1', '', '2'])。該月的參數(shù)可(kě)以由多個字符(例如(rú),'1<>2<>3'.split('<>')返回['1', '2', '3'])。用指定的分隔符分割空字符串返回['']。
如(rú)果未指定sep或is None,則應用不同的分割算法:将連續空白的運行(xíng)視(shì)為(wèi)單個分隔符,并且如(rú)果字符串具有前導或尾随空白,則結果的開(kāi)始或結束将不包含空字符串。因此,用None分隔符分隔一(yī)個空字符串或一(yī)個隻包含空格的字符串會返回[]。
例如(rú),' 1 2 3 '.split()返回['1', '2', '3']并' 1 2 3 '.split(None, 1)返回['1', '2 3 ']。
str.splitlines([keepends])
返回字符串中行(xíng)的列表,在行(xíng)邊界處突破。此方法使用通(tōng)用換行(xíng)符方法來分割線條。除非換行(xíng)符不包括在結果列表中keepends,并給出正确的。
Python的認識"\r","\n"以及"\r\n"作(zuò)為(wèi)邊界線為(wèi)8位字符串。
例如(rú):
>>> '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í)不同,此方法返回空字符串的空列表,并且終端行(xíng)分隔符不會導緻多餘的行(xíng):
>>> "".splitlines()
[]
>>> "One line\n".splitlines()
['One line']
複制
為(wèi)了(le)比較,split('\n')給出:
>>> ''.split('\n')
['']
>>> 'Two lines\n'.split('\n')
['Two lines', '']
複制
unicode.splitlines([keepends])
返回字符串中的行(xíng)列表,如(rú)str.splitlines()。但(dàn)是,Unicode方法在以下(xià)行(xíng)邊界上(shàng)分割,這(zhè)些行(xíng)邊界是8位字符串識别的通(tōng)用換行(xíng)符的超集。
表示 | 描述 |
---|---|
\ n | 換行(xíng) |
\ r | 回車 |
\ r \ n | 回車+換行(xíng) |
\ v或\ x0b | 線條制表 |
\ f或\ x0c | 換頁 |
\ X1C | 文件分隔符 |
\ X1D | 組分隔符 |
\ x1e | 記錄分隔符 |
\ x85 | 下(xià)一(yī)行(xíng)(C1控制代碼) |
\ u2028 | 線分隔符 |
\ u2029 | 段落分隔符 |
在版本2.7中更改:\v并\f添加到行(xíng)邊界列表中。
str.startswith(prefix[, start[, end]])
返回True字符串是否與開(kāi)始前綴,否則返回False。前綴也可(kě)以是要(yào)查找的前綴元組。使用可(kě)選啓動,測試字符串從(cóng)該位置開(kāi)始。使用可(kě)選結束時(shí),停止在該位置比較字符串。
在版本2.5中更改:接受元組作(zuò)為(wèi)前綴。
str.strip([chars])
返回删除前導字符和(hé)尾随字符的字符串副本。的字符參數(shù)是要(yào)除去的字符串指定的字符集。如(rú)果省略或者None,chars參數(shù)默認删除空格。該字符參數(shù)不是前綴或後綴; 相反,其值的所有組合都(dōu)被剝離:
>>> ' spacious '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
複制
在版本2.2.2中更改:支持chars參數(shù)。
str.swapcase()
返回大寫字符轉換為(wèi)小寫字符串的副本,反之亦然。
對于8位字符串,此方法是區(qū)域設置相關的。
str.title()
返回字符串的字幕版本,其中字以大寫字符開(kāi)頭,其餘字符為(wèi)小寫字母。
該算法使用簡單的與語言無關的單詞作(zuò)為(wèi)連續字母組的定義。該定義在許多情況下(xià)都(dōu)有效,但(dàn)這(zhè)意味着收縮和(hé)占有者中的撇号會形成單詞邊界,這(zhè)可(kě)能(néng)不是理想的結果:
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
複制
可(kě)以使用正則表達式構造撇号的解決方法:
>>> 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."
複制
對于8位字符串,此方法是區(qū)域設置相關的。
str.translate(table[, deletechars])
返回删除可(kě)選參數(shù)deletechars中出現的所有字符的字符串副本,其餘字符已通(tōng)過給定的轉換表映射,該轉換表必須是長(cháng)度為(wèi)256的字符串。
您可(kě)以使用模塊中的maketrans()幫助器功能(néng)string來創建轉換表。對于字符串對象,請(qǐng)将表參數(shù)設置None為(wèi)僅用于删除字符的翻譯:
>>> 'read this short text'.translate(None, 'aeiou')
'rd ths shrt txt'
複制
2.6版新增功能(néng):支持None 表格參數(shù)。
對于Unicode對象,該translate()方法不接受可(kě)選的deletechars參數(shù)。相反,它會返回一(yī)個s的副本,其中所有字符已經通(tōng)過給定的轉換表映射,該表必須是Unicode序号到Unicode序号,Unicode字符串或None。未映射的字符保持不變。映射到的字符None被删除。請(qǐng)注意,更靈活的方法是使用codecs模塊創建自(zì)定義字符映射編解碼器(請(qǐng)參閱encodings.cp1251示例)。
str.upper()
返回字符串的一(yī)個副本,并将所有裝入字符的字符[4]轉換為(wèi)大寫字符。請(qǐng)注意,str.upper().isupper()可(kě)能(néng)是False如(rú)果s包含無套管的字符或如(rú)果所得到的字符(縣)的Unicode類别不是“呂氏春秋”(字母,大寫),但(dàn)如(rú)“LT”(字母,首字母大寫)。
對于8位字符串,此方法是區(qū)域設置相關的。
str.zfill(width)
返回長(cháng)度寬度字符串中填充零的數(shù)字字符串。符号前綴處理正确。如(rú)果寬度小于或等于,則返回原始字符串len(s)。
New in version 2.2.2.
以下(xià)方法僅出現在unicode對象上(shàng):
unicode.isnumeric()
True如(rú)果S中隻有數(shù)字字符則返回,False否則返回。數(shù)字字符包括數(shù)字字符和(hé)具有Unicode數(shù)值屬性的所有字符,例如(rú)U + 2155,VULGAR FRACTION ONE FIFTH。
unicode.isdecimal()
True如(rú)果S中隻有十進制字符則返回,False否則返回。十進制字符包括數(shù)字字符以及可(kě)用于形成十進制小數(shù)數(shù)字的所有字符,例如(rú)U + 0660,ARABIC-INDIC DIGIT ZERO。
6.2。字符串格式化操作(zuò)
字符串和(hé)Unicode對象有一(yī)個獨特的內(nèi)置操作(zuò):%操作(zuò)符(模)。這(zhè)也被稱為(wèi)字符串格式化或插值運算符。鑒于format % values(其中格式是字符串或Unicode對象),格式中的%轉換規範将替換為(wèi)零個或多個值元素。其效果與使用C語言相似。如(rú)果format是一(yī)個Unicode對象,或者使用該轉換轉換的任何對象都(dōu)是Unicode對象,則結果也将是一(yī)個Unicode對象。sprintf()%s
如(rú)果格式需要(yào)單個參數(shù),則值可(kě)能(néng)是單個非元組對象。[5]否則,值必須是具有由格式字符串或單個映射對象(例如(rú)字典)指定的項目數(shù)量的元組。
轉換說明(míng)符包含兩個或多個字符,并具有以下(xià)組件,它們必須按以下(xià)順序出現:
該'%'字符表示說明(míng)符的開(kāi)始。
映射鍵(可(kě)選),由括号括起來的字符序列組成(例如(rú)(somename))。
轉換标志(可(kě)選),影響某些轉換類型的結果。
最小字段寬度(可(kě)選)。如(rú)果指定為(wèi)'*'(星号),則将從(cóng)元組的下(xià)一(yī)個元素值中讀取實際寬度,并且要(yào)轉換的對象位于最小字段寬度和(hé)可(kě)選精度之後。
精度(可(kě)選),以'.'(點)形式給出,然後是精度。如(rú)果指定為(wèi)'*'(星号),則将從(cóng)元組的下(xià)一(yī)個元素的值中讀取實際寬度,并且要(yào)轉換的值位于精度之後。
長(cháng)度修飾符(可(kě)選)。
轉換類型。
當正确的參數(shù)是一(yī)個字典(或其他(tā)映射類型)時(shí),字符串中的格式必須在字符後面插入一(yī)個帶括号的映射關鍵字'%'。映射鍵從(cóng)映射中選擇要(yào)格式化的值。例如(rú):
>>> print '%(language)s has %(number)03d quote types.' % \
... {"language": "Python", "number": 2}
Python has 002 quote types.
複制
在這(zhè)種情況下(xià)*,格式中不會出現說明(míng)符(因為(wèi)它們需要(yào)一(yī)個連續的參數(shù)列表)。
轉換标志字符是:
标志 | 含義 |
---|---|
'#' | 值轉換将使用“替代形式”(下(xià)面定義)。 |
'0' | 轉換将為(wèi)數(shù)字值填充零。 |
'-' | 轉換後的值将保持調整狀态(如(rú)果兩者都(dōu)被賦予,将覆蓋'0'轉換)。 |
' ' | (一(yī)個空格)在由正确的數(shù)字(或空字符串)産生的一(yī)個空白應該留下(xià)一(yī)個有符号的轉換。 |
'+' | 符号字符('+'或' - ')将在轉換之前(覆蓋“空格”标志)。 |
長(cháng)度修飾符(h,l或L)可(kě)能(néng)存在,但(dàn)會被忽略,因為(wèi)它對于Python不是必需的 - 例如(rú)與之%ld相同%d。
轉換類型是:
轉變 | 含義 | 筆(bǐ)記 |
---|---|---|
'd' | 帶符号的整數(shù)小數(shù)。 | |
'一(yī)世' | 帶符号的整數(shù)小數(shù)。 | |
這(zhè)個 | 簽署八進制值。 | (1) |
“在” | 已過時(shí)的類型 - 與“d”相同。 | (7) |
'X' | 簽名的十六進制(小寫)。 | (2) |
'X' | 簽名的十六進制(大寫)。 | (2) |
“與” | 浮點指數(shù)格式(小寫)。 | (3) |
'E' | 浮點指數(shù)格式(大寫)。 | (3) |
'F' | 浮點十進制格式。 | (3) |
'F' | 浮點十進制格式。 | (3) |
'G' | 浮點格式。如(rú)果指數(shù)小于-4或小于精度,則使用小寫指數(shù)格式,否則使用小數(shù)格式。 | (4) |
'G' | 浮點格式。如(rú)果指數(shù)小于-4或者不小于精度,則使用大寫指數(shù)格式,否則使用小數(shù)格式。 | (4) |
'C' | 單個字符(接受整數(shù)或單個字符串)。 | |
'R' | String(使用repr()轉換任何Python對象)。 | (5) |
'S' | 字符串(使用str()轉換任何Python對象)。 | (6) |
'%' | 沒有參數(shù)被轉換,結果為(wèi)'%'字符。 | |
注釋:
'0'如(rú)果結果的前導字符不是零,則替換形式将導緻在左側填充和(hé)數(shù)字格式之間(jiān)插入前導零()。
替代形式會導緻在第一(yī)個數(shù)字之前插入'0x'或'0X'取決于是否使用了(le)'x'或'X'格式。
替代形式會導緻結果始終包含小數(shù)點,即使沒有數(shù)字跟着它。精度決定小數(shù)點後的位數(shù),默認為(wèi)6。
替代形式導緻結果始終包含小數(shù)點,并且尾部零不會像原本那(nà)樣被删除。精度決定小數(shù)點前後的有效位數(shù),默認值為(wèi)6。
該%r轉換是在Python 2.0中添加的。精度決定了(le)使用的字符的最大數(shù)量。
如(rú)果提供的對象或格式是一(yī)個unicode字符串,則結果字符串也是unicode。精度決定了(le)使用的字符的最大數(shù)量。
見(jiàn)PEP 237。
由于Python字符串具有明(míng)确的長(cháng)度,因此%s轉換不會假定'\0'字符串的末尾。
在版本2.7中進行(xíng)了(le)更改:%f絕對值超過1e50的數(shù)字轉換不再被%g轉換替代。
附加的字符串操作(zuò)在标準模塊中定義string和(hé)re。
6.3。XRange類型
該xrange類型是一(yī)種常用于循環的不可(kě)變序列。該xrange類型的優點是xrange對象總是會占用相同數(shù)量的內(nèi)存,而不管它所代表的範圍的大小。沒有一(yī)緻的性能(néng)優勢。
XRange對象的行(xíng)為(wèi)很(hěn)少(shǎo):它們隻支持索引,叠代和(hé)len()函數(shù)。
6.4。可(kě)變序列類型
列表和(hé)bytearray對象支持允許就地(dì)修改對象的其他(tā)操作(zuò)。其他(tā)可(kě)變序列類型(添加到語言中時(shí))也應該支持這(zhè)些操作(zuò)。字符串和(hé)元組是不可(kě)變的序列類型:一(yī)旦創建,這(zhè)些對象就不能(néng)被修改。以下(xià)操作(zuò)定義在可(kě)變序列類型上(shàng)(其中x是任意對象):
手術(shù) | 結果 | 筆(bǐ)記 |
---|---|---|
if = x | s的項目i被x替換 | |
如(rú)果:j = t | 從(cóng)i到j的片段由可(kě)叠代的t的內(nèi)容替換 | |
del si:j | 相同,如(rú)果:j = [] | |
如(rú)果: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 | 大部分與slen(s)相同:len(s)= t | (3) |
s * = n | 将其內(nèi)容重複n次更新 | (11) |
s.count(x)的 | 返回i的數(shù)量為(wèi)si == x | |
s.index(x [,i,j]) | 返回最小的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的項目到位 | (7) |
s.sort([cmp [,key,reverse]]) | 對s的項目進行(xíng)排序 | (7)(8)(9)(10) |
注釋:
t必須與它正在替換的切片具有相同的長(cháng)度。
Python的C實現在曆史上(shàng)接受了(le)多個參數(shù),并将它們隐式地(dì)加入到一(yī)個元組中; 這(zhè)不再适用于Python 2.0。自(zì)從(cóng)Python 1.4以來,這(zhè)種錯誤的使用已被廢棄。
t可(kě)以是任何可(kě)叠代的對象。
在s中未找到xValueError時(shí)引發。當負方向索引作(zuò)為(wèi)方法的第二個或第三個參數(shù)傳遞時(shí),與切片索引相同,将添加列表長(cháng)度。如(rú)果它仍然是負數(shù),就像截面索引一(yī)樣截斷為(wèi)零。在版本2.3中更改:以前,沒有用于指定開(kāi)始和(hé)停止位置的參數(shù)。index()index()
如(rú)果将負向索引作(zuò)為(wèi)方法的第一(yī)個參數(shù)傳遞,則會像insert()添加切片索引一(yī)樣添加列表長(cháng)度。如(rú)果它仍然是負數(shù),就像截面索引一(yī)樣截斷為(wèi)零。在版本2.3中更改:以前,所有負指數(shù)都(dōu)被截斷為(wèi)零。
該pop()方法的可(kě)選參數(shù)我默認為(wèi)-1,所以默認情況下(xià)最後一(yī)項被删除并返回。
在排序或倒排大型列表時(shí),sort()和(hé)reverse()方法會修改列表以實現空間(jiān)節約。為(wèi)了(le)提醒您,他(tā)們以副作(zuò)用的方式操作(zuò),他(tā)們不會返回排序或颠倒的列表。
該sort()方法采用可(kě)選參數(shù)來控制比較。 cmp指定兩個參數(shù)(列表項)的自(zì)定義比較函數(shù),它應該返回一(yī)個負數(shù),零或正數(shù),具體取決于第一(yī)個參數(shù)是否小于,等于或大于第二個參數(shù):cmp=lambda x,y: cmp(x.lower(), y.lower())。默認值是None。 key指定一(yī)個用于從(cóng)每個列表元素中提取比較鍵的參數(shù)的函數(shù):key=str.lower。默認值是None。 reverse是一(yī)個布爾值。如(rú)果設置為(wèi)True,則列表元素按照每個比較被颠倒的順序進行(xíng)排序。一(yī)般來說,關鍵和(hé)反向轉換過程比指定等效的cmp函數(shù)要(yào)快(kuài)得多。這(zhè)是因為(wèi)對于每個列表元素,cmp被多次調用,而按鍵和(hé)反向觸摸每個元素隻有一(yī)次。用functools.cmp_to_key()一(yī)個老(lǎo)式的轉換CMP功能(néng)的關鍵功能(néng)。在版本2.3中進行(xíng)了(le)更改:添加None了(le)對等效于省略cmp的支持。
在版本2.4中進行(xíng)了(le)更改:添加了(le)對密鑰和(hé)反向的支持。
從(cóng)Python 2.3開(kāi)始,該sort()方法保證穩定。如(rú)果确保不會更改比較相等的元素的相對順序,則排序是穩定的 - 這(zhè)對于多次排序(例如(rú),按部門排序,然後按薪級)進行(xíng)排序很(hěn)有幫助。
CPython實現細節:列表正在排序時(shí),嘗試對列表進行(xíng)更改或甚至檢查的影響是未定義的。Python 2.3和(hé)更新版本的C實現使得列表在持續時(shí)間(jiān)內(nèi)顯示為(wèi)空,并且ValueError如(rú)果它能(néng)夠檢測列表在排序過程中發生了(le)變異,則引發該列表。
值n是一(yī)個整數(shù)或實現的對象__index__()。n的零和(hé)負值清除序列。序列中的項目不會被複制; 它們被多次引用,如(rú)s * n序列類型 - str,unicode,list,tuple,bytearray,buffer,xrange中所解釋的。
網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發