Types: 6. Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange
6. Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange
有七种序列类型:字符串,Unicode字符串,列表,元组,字节数组,缓冲区和xrange对象。
对于其他容器,请参阅内置dict()
和set()函数
以及collections
模块。
字符串文字用单引号或双引号写入:'xyzzy'
,"frobozz"
。有关字符串文字的更多信息,请参阅字符串文字。Unicode字符串很像字符串,但是在语法中使用前面的'u'
字符指定:u'abc'
,u"def"
。除了这里描述的功能之外,字符串方法部分中还描述了特定于字符串的方法。列表用方括号构成,用逗号分隔项目:[a, b, c]
。元组由逗号运算符(不在方括号内)构造,带或不带括号括起来,但空元组必须带括号括起来的括号,如a, b, c
或()
。单个元组元组必须具有尾随逗号,例如(d,)
。
Bytearray对象是使用内置函数创建的bytearray()
。
缓冲区对象不直接受Python语法支持,但可以通过调用内置函数来创建buffer()
。他们不支持连接或重复。
xrange类型的对象类似于缓冲区,因为没有特定的语法来创建它们,但是它们是使用xrange()
函数创建的。它们不支持切片,串联或重复使用in
,not in
,min()
或max()
对它们是无效的。
大多数序列类型支持以下操作。在in
和not in
操作具有比较操作相同的优先级。在+
与*
操作具有相同的优先级对应的数字运算。[3]为可变序列类型提供了其他方法。
此表列出按升序优先级排序的序列操作。在表中,s
和t
是相同类型的序列; n
,i
和j
是整数:
Operation | 结果 | 笔记 |
---|---|---|
x in s | 如果s的项等于x,则为真,否则为False | (1) |
x不在s中 | 假如一个s的项等于x,则为假,否则为真 | (1) |
s + t | s和t的连接 | (6) |
s * n,n * s | 相当于将n次添加到自身 | (2) |
si | 第s项,起源0 | (3) |
如果:J- | 从我到j的切片 | (3)(4) |
如果:J-ķ | 从步骤k的i到j的片段 | (3)(5) |
只有(一) | s的长度 | |
分钟) | s的最小项 | |
MAX(S) | 最大的项目 | |
s.index(x)的 | s中第一次出现x的索引 | |
s.count(x)的 | s中出现x的总次数 | |
序列类型也支持比较。具体来说,元组和列表通过比较相应的元素按字典顺序进行比较。这意味着为了比较相等,每个元素必须相等并且两个序列必须是相同类型并具有相同长度。(有关完整的详细信息,请参阅语言参考中的比较。)
Notes:
- 当
s
是一个字符串或Unicode字符串对象时in
,not in
操作就像一个子串测试一样。在2.3之前的Python版本中,x
必须是长度为1的字符串。在Python 2.3及更高版本中,x
可以是任意长度的字符串。
- 小于n的值0被视为0(其产生与s相同类型的空序列)。请注意,序列中的项目不会被复制; 它们被多次引用。这经常困扰着新的Python程序员; 考虑:列表= [[]] * 3 >>>列表[[],[],[]] >>> lists0.append(3)>>>列表[3,3]发生了什么[[]]是一个包含一个空列表的单元素列表,所以这三个元素[[]] * 3都是对这个单个空列表的引用。修改任何元素lists修改这个单子列表。您可以通过这种方式创建不同列表的列表:lists = [[] for i in range(3)] >>> lists0.append(3)>>> lists1.append(5)>>> lists2.append(7 )>>> lists [3,5,7]常见问题解答条目中提供了进一步说明如何创建多维列表?。
- 如果
i
或j
是负数,则该索引是相对于序列s
的末尾:len(s) + i
或被len(s) + j
替换。但请注意,-0
依然如此0
。
- 的切片小号从我到Ĵ被定义为物品的具有索引序列ķ使得i <= k < j。如果我或j大于len(s),请使用len(s)。如果我被省略或者None使用0。如果省略了j,或者None使用len(s)。如果我大于或等于j,则切片为空。
- 步骤k中从i到j的s片段被定义为具有这样的索引的项目序列。换句话说,在指数,,,等等,停车时Ĵ达到(但绝不包括Ĵ)。当k是正数时,如果它们更大,则i和j会减少。当k是负数时,如果i和j更大,则i和j减小。如果我或j被省略或x = i + n*k0 <= n < (j-i)/kii+ki+2*ki+3*klen(s)len(s) - 1None,它们变成了“终点”值(终点取决于k的符号)。请注意,k不能为零。如果k是None,它被视为像1。
CPython实现细节:
如果s
和t
都是字符串,则一些Pyt
hon实现(例如CPyt
hon)通常可以为窗体s = s + t
或窗体的赋值执行就地优化s += t
。如果适用,这种优化使得二次运行时间不太可能。这种优化是版本和实现相关的。对于性能敏感的代码,最好使用str.join()
确保不同版本和实现之间一致的线性级联性能的方法。
在版本2.4中更改:以前,字符串连接从来没有发生过。
6.1。字符串方法
下面列出了8位字符串和Unicode对象都支持的字符串方法。其中一些也可用于bytearray
对象。
另外,Python的字符串支持序列类型中描述的序列类型方法 - str,unicode,list,tuple,bytearray,buffer,xrange部分。要输出格式化的字符串,请使用%
字符串格式操作部分中描述的模板字符串或运算符。另请参阅re
模块,了解基于正则表达式的字符串函数。
str.capitalize()
返回字符串的一个副本,其首字母大写,其余的小写。
对于8位字符串,此方法是区域设置相关的。
str.center(width[, fillchar])
返回以一个长度宽度
的字符串为中心。填充是使用指定的fillchar
完成的(默认为空格)。
在版本2.4中更改:支持fillchar
参数。
str.count(sub[, start[, end]])
返回范围start
,end 中子
串sub
的非重叠次数。可选参数开始
和结束
被解释为切片符号。
str.decode([encoding[, errors]])
使用注册编码的编码
解码器解码字符串。编码
默认为默认的字符串编码
。可能会给出错误
来设置不同的错误
处理方案。默认值是'strict'
,意味着编码
错误
会增加UnicodeError
。其他可能的值是'ignore'
,'replace'
并且通过注册的任何其他名称codecs.register_error()
,请参见编解码器基类。
2.2版本中的新功能。
在版本2.3中进行了更改:添加了对其他错误处理方案的支持。
在2.7版本中进行了更改:添加了对关键字参数的支持。
str.encode([encoding[, errors]])
返回字符串的编码版本。默认编码是当前的默认字符串编码。可能会给出错误
来设置不同的错误
处理方案。错误
的默认值是'strict'
,这意味着编码错误
会引发一个错误
UnicodeError
。其他可能的值'ignore'
,'replace'
,'xmlcharrefreplace'
,'backslashreplace'
并通过注册的任何其他名称codecs.register_error()
,请参见编解码基础类。有关可能的编码列表,请参见标准编码部分。
2.0版本中的新功能。
在版本2.3中进行了更改:添加了对'xmlcharrefreplace'
和'backslashreplace'
和其他错误处理方案的支持。
在2.7版本中进行了更改:添加了对关键字参数的支持。
str.endswith(suffix[, start[, end]])
返回True
字符串是否与指定的结束后缀
,否则返回False
。后缀
也可以是后缀
的元组来查找。随着可选启动
,测试开始在那个位置。选择结束时
,停止在该位置进行比较。
在版本2.5中更改:接受元组作为后缀
。
str.expandtabs([tabsize])
返回字符串的副本,其中所有制表符由一个或多个空格替换,具体取决于当前列和给定制表符大小
。选项卡位置出现在每个制表符大小
字符中(默认值为8,在列0,8,16
等处提供制表位置)。要扩展字符串,当前列设置为零,字符串逐个检查。如果该字符是一个制表符(\t
),则结果中会插入一个或多个空格字符,直到当前列等于下一个制表符位置。(制表符本身不被复制。)如果该字符是换行符(\n
)或返回(\r
),它被复制并且当前列被重置为零。任何其他字符都将被不变地复制,而当前列增加1,无论打印时字符如何表示。
>>> '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 子
字符串的最低索引s[start:end]
。可选参数开始
和结束
被解释为切片符号。-1
如果未找到子项,
则返回。
注释
find()
只有在您需要知道sub
的位置时才应该使用该方法。要检查sub
是否是子字符串,请使用in
运算符:
>>> 'Py' in 'Python'
True
str.format(*args, **kwargs)
执行字符串格式化操作。调用此方法的字符串可以包含由大括号分隔的文本文本或替换字段{}
。每个替换字段包含位置参数的数字索引或关键字参数的名称。返回字符串的副本,其中每个替换字段将替换为相应参数的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
请参阅格式字符串语法以获取可在格式字符串中指定的各种格式选项的说明。
这种字符串格式化方法是Python 3中的新标准,应优先%
于新代码中字符串格式化操作中描述的格式。
2.6版本中的新功能。
str.index(sub[, start[, end]])
就像find()
,但ValueError
在没有找到子字符串时引发。
str.isalnum()
如果字符串中的所有字符都是字母数字并且至少有一个字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.isalpha()
如果字符串中的所有字符都是字母并且至少有一个字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.isdigit()
如果字符串中的所有字符都是数字并且至少有一个字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.islower()
如果字符串中的所有套用字符[4]都是小写,并且至少有一个套用字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.isspace()
如果字符串中只有空格字符,并且至少有一个字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.istitle()
如果字符串是一个标题字符串并且至少有一个字符,则返回true,例如,大写字符只能跟在未写入的字符之后,而小写字母只能在已封装的字符之后。否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.isupper()
如果字符串中的所有套用字符[4]都是大写且至少有一个套用字符,则返回true,否则返回false。
对于8位字符串,此方法是区域设置相关的。
str.join(iterable)
返回一个字符串,它是可 迭代迭代中
字符串的串联。元素之间的分隔符是提供此方法的字符串。
str.ljust(width[, fillchar])
以长度宽度
的字符串返回左对齐的字符串。填充是使用指定的fillchar
完成的(默认为空格)。如果宽度
小于或等于,则返回原始字符串len(s)
。
在版本2.4中更改:支持fillchar
参数。
str.lower()
返回字符串的一个副本,并将所有装入字符的字符[4]转换为小写字母。
对于8位字符串,此方法是区域设置相关的。
str.lstrip([chars])
返回删除前导字符
的字符
串的副本。的字符
参数是要除去的字符
串指定的字符
集。如果省略或者None
,chars
参数默认删除空格。该字符
参数不是前缀; 相反,其值的所有组合都被剥离:
>>> ' spacious '.lstrip()
'spacious '
>>> 'www.example.com'.lstrip('cmowz.')
'example.com'
在版本2.2.2中更改:支持chars
参数。
str.partition(sep)
在sep
第一次出现时拆分字符串,并返回包含分隔符之前的部分,分隔符本身和分隔符之后的部分的三元组。如果未找到分隔符,则返回包含该字符串本身的三元组,然后返回两个空字符串。
2.5版本中的新功能。
str.replace(old, new[, count])
返回所有出现的旧
字符串替换为新
字符串的副本。如果给出可选的参数计数
,则仅替换第一个计数
事件。
str.rfind(sub[, start[, end]])
返回找到sub
string 子
字符串的最高索引,这样sub
就包含在其中s[start:end]
。可选参数开始
和结束
被解释为切片符号。返回-1
失败。
str.rindex(sub[, start[, end]])
像rfind()
但ValueError
子
字符串子
未找到时引发。
str.rjust(width[, fillchar])
以字符串长度宽度
返回右对齐的字符串。填充是使用指定的fillchar
完成的(默认为空格)。如果宽度
小于或等于,则返回原始字符串len(s)
。
在版本2.4中更改:支持fillchar
参数。
str.rpartition(sep)
在最后出现的sep
处拆分字符串,并返回包含分隔符之前的部分,分隔符本身和分隔符之后的部分的三元组。如果未找到分隔符,则返回包含两个空字符串的三元组,然后返回字符串本身。
2.5版本中的新功能。
str.rsplit([sep[, maxsplit]])
使用sep
作为分隔符字符串,返回字符串中单词的列表。如果给出maxsplit,
则最多maxsplit
分裂,最右边
的分裂。如果没有指定sep
或者None
任何空格字符串是分隔符。除了从右边分开外,rsplit()
其行为split()
如下所述。
2.4版本中的新功能。
str.rstrip([chars])
返回删除了尾随字符
的字符
串副本。的字符
参数是要除去的字符
串指定的字符
集。如果省略或者None
,chars
参数默认删除空格。该字符
参数不是后缀; 相反,其值的所有组合都被剥离:
>>> ' spacious '.rstrip()
' spacious'
>>> 'mississippi'.rstrip('ipz')
'mississ'
在版本2.2.2中更改:支持chars
参数。
str.split([sep[, maxsplit]])
使用sep
作为分隔符字符串,返回字符串中单词的列表。如果给出maxsplit
,最多可以完成maxsplit
分割(因此,列表最多只有maxsplit+1
元素)。如果未指定maxsplit
或者-1
,则分割数量没有限制(所有可能的分割)。
如果给出了sep,则连续分隔符不会分组在一起,并被视为分隔空字符串(例如,'1,,2'.split(',')返回['1', '', '2'])。该月的参数可以由多个字符(例如,'1<>2<>3'.split('<>')返回['1', '2', '3'])。用指定的分隔符分割空字符串返回['']。
如果未指定sep
或is None
,则应用不同的分割算法:将连续空白的运行视为单个分隔符,并且如果字符串具有前导或尾随空白,则结果的开始或结束将不包含空字符串。因此,用None
分隔符分隔一个空字符串或一个只包含空格的字符串会返回[]
。
例如,' 1 2 3 '.split()
返回['1', '2', '3']
并' 1 2 3 '.split(None, 1)
返回['1', '2 3 ']
。
str.splitlines([keepends])
返回字符串中行的列表,在行边界处突破。此方法使用通用换行符方法来分割线条。除非换行符不包括在结果列表中keepends
,并给出正确的。
Python的认识"\r"
,"\n"
以及"\r\n"
作为边界线为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
时不同,此方法返回空字符串的空列表,并且终端行分隔符不会导致多余的行:
>>> "".splitlines()
[]
>>> "One line\n".splitlines()
['One line']
为了比较,split('\n')
给出:
>>> ''.split('\n')
['']
>>> 'Two lines\n'.split('\n')
['Two lines', '']
unicode.splitlines([keepends])
返回字符串中的行列表,如str.splitlines()
。但是,Unicode方法在以下行边界上分割,这些行边界是8位字符串识别的通用换行符的超集。
表示 | 描述 |
---|---|
\ n | 换行 |
\ r | 回车 |
\ r \ n | 回车+换行 |
\ v或\ x0b | 线条制表 |
\ f或\ x0c | 换页 |
\ X1C | 文件分隔符 |
\ X1D | 组分隔符 |
\ x1e | 记录分隔符 |
\ x85 | 下一行(C1控制代码) |
\ u2028 | 线分隔符 |
\ u2029 | 段落分隔符 |
在版本2.7中更改:\v
并\f
添加到行边界列表中。
str.startswith(prefix[, start[, end]])
返回True
字符串是否与开始前缀
,否则返回False
。前缀
也可以是要查找的前缀
元组。使用可选启动
,测试字符串从该位置开始。使用可选结束时
,停止在该位置比较字符串。
在版本2.5中更改:接受元组作为前缀
。
str.strip([chars])
返回删除前导字符
和尾随字符
的字符
串副本。的字符
参数是要除去的字符
串指定的字符
集。如果省略或者None
,chars
参数默认删除空格。该字符
参数不是前缀或后缀; 相反,其值的所有组合都被剥离:
>>> ' spacious '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
在版本2.2.2中更改:支持chars
参数。
str.swapcase()
返回大写字符转换为小写字符串的副本,反之亦然。
对于8位字符串,此方法是区域设置相关的。
str.title()
返回字符串的字幕版本,其中字以大写字符开头,其余字符为小写字母。
该算法使用简单的与语言无关的单词作为连续字母组的定义。该定义在许多情况下都有效,但这意味着收缩和占有者中的撇号会形成单词边界,这可能不是理想的结果:
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
可以使用正则表达式构造撇号的解决方法:
>>> 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位字符串,此方法是区域设置相关的。
str.translate(table[, deletechars])
返回删除可选参数deletechars
中出现的所有字符的字符串副本,其余字符已通过给定的转换表映射,该转换表必须是长度为256的字符串。
您可以使用模块中的maketrans()
帮助器功能string
来创建转换表
。对于字符串对象,请将表
参数设置None
为仅用于删除字符的翻译:
>>> 'read this short text'.translate(None, 'aeiou')
'rd ths shrt txt'
2.6版新增功能:支持None
表格
参数。
对于Unicode对象,该translate()
方法不接受可选的deletechars
参数。相反,它会返回一个s
的副本,其中所有字符已经通过给定的转换表映射,该表必须是Unicode序号到Unicode序号,Unicode字符串或None
。未映射的字符保持不变。映射到的字符None
被删除。请注意,更灵活的方法是使用codecs
模块创建自定义字符映射编解码器(请参阅encodings.cp1251
示例)。
str.upper()
返回字符串的一个副本,并将所有装入字符的字符[4]转换为大写字符。请注意,str.upper().isupper()
可能是False
如果s
包含无套管的字符或如果所得到的字符(县)的Unicode类别不是“吕氏春秋”(字母,大写),但如“LT”(字母,首字母大写)。
对于8位字符串,此方法是区域设置相关的。
str.zfill(width)
返回长度宽度
字符串中填充零的数字字符串。符号前缀处理正确。如果宽度
小于或等于,则返回原始字符串len(s)
。
New in version 2.2.2.
以下方法仅出现在unicode对象上:
unicode.isnumeric()
True
如果S中只有数字字符则返回,False
否则返回。数字字符包括数字字符和具有Unicode数值属性的所有字符,例如U + 2155,VULGAR FRACTION ONE FIFTH。
unicode.isdecimal()
True
如果S中只有十进制字符则返回,False
否则返回。十进制字符包括数字字符以及可用于形成十进制小数数字的所有字符,例如U + 0660,ARABIC-INDIC DIGIT ZERO。
6.2。字符串格式化操作
字符串和Unicode对象有一个独特的内置操作:%
操作符(模)。这也被称为字符串格式化
或插值
运算符。鉴于format % values
(其中格式
是字符串或Unicode对象),格式
中的%
转换规范将替换为零个或多个值
元素。其效果与使用C语言相似。如果format
是一个Unicode对象,或者使用该转换转换的任何对象都是Unicode对象,则结果也将是一个Unicode对象。sprintf()%s
如果格式
需要单个参数,则值
可能是单个非元组对象。[5]否则,值
必须是具有由格式
字符串或单个映射对象(例如字典)指定的项目数量的元组。
转换说明符包含两个或多个字符,并具有以下组件,它们必须按以下顺序出现:
- 该
'%'
字符表示说明符的开始。
- 映射键(可选),由括号括起来的字符序列组成(例如
(somename)
)。
- 转换标志(可选),影响某些转换类型的结果。
- 最小字段宽度(可选)。如果指定为
'*'
(星号),则将从元组的下一个元素值中
读取实际宽度,并且要转换的对象位于最小字段宽度和可选精度之后。
- 精度(可选),以
'.'
(点)形式给出,然后是精度。如果指定为'*'
(星号),则将从元组的下一个元素的值中
读取实际宽度,并且要转换的值位于精度之后。
- 长度修饰符(可选)。
- 转换类型。
当正确的参数是一个字典(或其他映射类型)时,字符串中的格式必须
在字符后面插入一个带括号的映射关键字'%'
。映射键从映射中选择要格式化的值。例如:
>>> print '%(language)s has %(number)03d quote types.' % \
... {"language": "Python", "number": 2}
Python has 002 quote types.
在这种情况下*
,格式中不会出现说明符(因为它们需要一个连续的参数列表)。
转换标志字符是:
标志 | 含义 |
---|---|
'#' | 值转换将使用“替代形式”(下面定义)。 |
'0' | 转换将为数字值填充零。 |
'-' | 转换后的值将保持调整状态(如果两者都被赋予,将覆盖'0'转换)。 |
' ' | (一个空格)在由正确的数字(或空字符串)产生的一个空白应该留下一个有符号的转换。 |
'+' | 符号字符('+'或' - ')将在转换之前(覆盖“空格”标志)。 |
长度修饰符(h
,l
或L
)可能存在,但会被忽略,因为它对于Pyth
on不是必需的 - 例如与之%ld
相同%d
。
转换类型是:
转变 | 含义 | 笔记 |
---|---|---|
'd' | 带符号的整数小数。 | |
'一世' | 带符号的整数小数。 | |
这个 | 签署八进制值。 | (1) |
“在” | 已过时的类型 - 与“d”相同。 | (7) |
'X' | 签名的十六进制(小写)。 | (2) |
'X' | 签名的十六进制(大写)。 | (2) |
“与” | 浮点指数格式(小写)。 | (3) |
'E' | 浮点指数格式(大写)。 | (3) |
'F' | 浮点十进制格式。 | (3) |
'F' | 浮点十进制格式。 | (3) |
'G' | 浮点格式。如果指数小于-4或小于精度,则使用小写指数格式,否则使用小数格式。 | (4) |
'G' | 浮点格式。如果指数小于-4或者不小于精度,则使用大写指数格式,否则使用小数格式。 | (4) |
'C' | 单个字符(接受整数或单个字符串)。 | |
'R' | String(使用repr()转换任何Python对象)。 | (5) |
'S' | 字符串(使用str()转换任何Python对象)。 | (6) |
'%' | 没有参数被转换,结果为'%'字符。 | |
注释:
'0'
如果结果的前导字符不是零,则替换形式将导致在左侧填充和数字格式之间插入前导零()。
- 替代形式会导致在第一个数字之前插入
'0x'
或'0X'
取决于是否使用了'x'
或'X'
格式。
- 替代形式会导致结果始终包含小数点,即使没有数字跟着它。精度决定小数点后的位数,默认为6。
- 替代形式导致结果始终包含小数点,并且尾部零不会像原本那样被删除。精度决定小数点前后的有效位数,默认值为6。
- 该
%r
转换是在Python 2.0中添加的。精度决定了使用的字符的最大数量。
- 如果提供的对象或格式是一个
unicode
字符串,则结果字符串也是unicode
。精度决定了使用的字符的最大数量。
- 见
PEP 237
。
由于Python字符串具有明确的长度,因此%s
转换不会假定'\0'
字符串的末尾。
在版本2.7中进行了更改:%f
绝对值超过1e50的数字转换不再被%g
转换替代。
附加的字符串操作在标准模块中定义string
和re
。
6.3。XRange类型
该xrange
类型是一种常用于循环的不可变序列。该xrange
类型的优点是xrange
对象总是会占用相同数量的内存,而不管它所代表的范围的大小。没有一致的性能优势。
XRange对象的行为很少:它们只支持索引,迭代和len()
函数。
6.4。可变序列类型
列表和bytearray
对象支持允许就地修改对象的其他操作。其他可变序列类型(添加到语言中时)也应该支持这些操作。字符串和元组是不可变的序列类型:一旦创建,这些对象就不能被修改。以下操作定义在可变序列类型上(其中x
是任意对象):
手术 | 结果 | 笔记 |
---|---|---|
if = x | s的项目i被x替换 | |
如果:j = t | 从i到j的片段由可迭代的t的内容替换 | |
del si:j | 相同,如果:j = [] | |
如果:j:k = t | si:j:k的元素被t的元素替换 | (1) |
del if:j:k | 从列表中删除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次更新 | (11) |
s.count(x)的 | 返回i的数量为si == x | |
s.index(x [,i,j]) | 返回最小的k,使得sk == x和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的项目进行排序 | (7)(8)(9)(10) |
注释:
t
必须与它正在替换的切片具有相同的长度。
- Python的C实现在历史上接受了多个参数,并将它们隐式地加入到一个元组中; 这不再适用于Python 2.0。自从Python 1.4以来,这种错误的使用已被废弃。
t
可以是任何可迭代的对象。
- 在
s中
未找到x
ValueError
时引发。当负方向索引作为方法的第二个或第三个参数传递时,与切片索引相同,将添加列表长度。如果它仍然是负数,就像截面索引一样截断为零。在版本2.3中更改:以前,没有用于指定开始和停止位置的参数。index()index()
- 如果将负向索引作为方法的第一个参数传递,则会像
insert()
添加切片索引一样添加列表长度。如果它仍然是负数,就像截面索引一样截断为零。在版本2.3中更改:以前,所有负指数都被截断为零。
- 该
pop()
方法的可选参数我
默认为-1
,所以默认情况下最后一项被删除并返回。
- 在排序或倒排大型列表时,
sort()
和reverse()
方法会修改列表以实现空间节约。为了提醒您,他们以副作用的方式操作,他们不会返回排序或颠倒的列表。
- 该
sort()
方法采用可选参数来控制比较。cmp
指定两个参数(列表项)的自定义比较函数,它应该返回一个负数,零或正数,具体取决于第一个参数是否小于,等于或大于第二个参数:cmp=lambda x,y: cmp(x.lower(), y.lower())
。默认值是None
。key
指定一个用于从每个列表元素中提取比较键的参数的函数:key=str.lower
。默认值是None
。reverse
是一个布尔值。如果设置为True
,则列表元素按照每个比较被颠倒的顺序进行排序。一般来说,关键
和反向
转换过程比指定等效的cmp
函数要快得多。这是因为对于每个列表元素,cmp
被多次调用,而按键
和反向
触摸每个元素只有一次。用functools.cmp_to_key()
一个老式的转换CMP
功能的关键
功能。在版本2.3中进行了更改:添加None
了对等效于省略cmp的
支持。
在版本2.4中进行了更改:添加了对密钥
和反向的
支持。
- 从Python 2.3开始,该
sort()
方法保证稳定。如果确保不会更改比较相等的元素的相对顺序,则排序是稳定的 - 这对于多次排序(例如,按部门排序,然后按薪级)进行排序很有帮助。
CPython实现细节:
列表正在排序时,尝试对列表进行更改或甚至检查的影响是未定义的。Python 2.3和更新版本的C实现使得列表在持续时间内显示为空,并且ValueError
如果它能够检测列表在排序过程中发生了变异,则引发该列表。
- 值
n
是一个整数或实现的对象__index__()
。n的
零和负值清除序列。序列中的项目不会被复制; 它们被多次引用,如s * n
序列类型 - str,un
icode,list,tuple,bytearray,buffer,xran
ge中所解释的。