序列
此类对象表示以非负整数作为索引的有限有序集。
内置函数
len()
可返回一个序列的条目数量。当一个序列的长度为 n 时,索引集包含数字 0, 1, ..., n-1。序列 a 的条目 i 可通过
a[i]
选择。序列还支持切片:
a[i:j]
选择索引号为 k 的所有条目,i<=
k<
j。当用作表达式时,序列的切片就是一个与序列类型相同的新序列。新序列的索引还是从 0 开始。有些序列还支持带有第三个 "step" 形参的 "扩展切片":
a[i:j:k]
选择 a 中索引号为 x 的所有条目,x = i + n*k
, n>=
0
且 i<=
x<
j。
序列可根据其可变性分为:不可变序列和可变序列
不可变序列
不可变序列类型的对象一旦创建就不能再改变。(如果对象包含对其他对象的引用,其中的可变对象就是可以改变的;但是,一个不可变对象所直接引用的对象集是不能改变的。)
以下类型属于不可变对象:
字符串
字符串是由 Unicode 码位值组成的序列。范围在
U+0000 - U+10FFFF
之内的所有码位值都可在字符串中使用。Python 没有
char
类型;而是将字符串中的每个码位表示为一个长度为1
的字符串对象。内置函数:
ord()
可将一个码位由字符串形式转换成一个范围在0 - 10FFFF
之内的整型数;
chr()
可将一个范围在0 - 10FFFF
之内的整型数转换为长度为1
的对应字符串对象。
str.encode()
可以使用指定的文本编码将str
转换为bytes
bytes.decode()
则可以实现反向的解码。元组
一个元组中的条目可以是任意 Python 对象。包含两个或以上条目的元组由逗号分隔的表达式构成。只有一个条目的元组 ('单项元组') 可通过在表达式后加一个逗号来构成 (一个表达式本身不能创建为元组,因为圆括号要用来设置表达式分组)。一个空元组可通过一对内容为空的圆括号创建。
字节串
字节串对象是不可变的数组。其中每个条目都是一个 8 位字节,以取值范围 0 <= x < 256 的整型数表示。字节串字面值 (例如
b'abc'
) 和内置的bytes()
构造器可被用来创建字节串对象。字节串对象还可以通过decode()
方法解码为字符串。
可变序列
可变序列在被创建后仍可被改变。下标和切片标注可被用作赋值和
del
(删除) 语句的目标。目前有两种内生可变序列类型:
列表
列表中的条目可以是任意 Python 对象。列表由用方括号括起并由逗号分隔的多个表达式构成。(注意创建长度为 0 或 1 的列表无需使用特殊规则。)
字节数组
字节数组对象属于可变数组。
可以通过内置的
bytearray()
构造器来创建。除了是可变的 (因而也是不可哈希的),在其他方面字节数组提供的接口和功能都与不可变的
bytes
对象一致。扩展模块
array
提供了一个额外的可变序列类型示例,collections
模块也是如此。
集合类型
此类对象表示由不重复且不可变对象组成的无序且有限的集合。
因此它们不能通过下标来索引。但是它们可被迭代,
也可用内置函数
len()
返回集合中的条目数。集合常见的用处是快速成员检测,去除序列中的重复项,以及进行交、并、差和对称差等数学运算。
对于集合元素所采用的不可变规则与字典的键相同。注意数字类型遵循正常的数字比较规则: 如果两个数字相等 (例如
1
和1.0
),则同一集合中只能包含其中一个。目前有两种内生集合类型:
集合
此类对象表示可变集合。它们可通过内置的
set()
构造器创建,并且创建之后可以通过方法进行修改,例如add()
。冻结集合
此类对象表示不可变集合。它们可通过内置的
frozenset()
构造器创建。由于 frozenset 对象不可变且 hashable,它可以被用作另一个集合的元素或是字典的键。
映射
此类对象表示由任意索引集合所索引的对象的集合。
通过下标
a[k]
可在映射a
中选择索引为k
的条目;这可以在表达式中使用,也可作为赋值或del
语句的目标。内置函数
len()
可返回一个映射中的条目数。目前只有一种内生映射类型:
字典
此类对象表示由几乎任意值作为索引的有限个对象的集合。
不可作为键的值类型只有包含列表或字典或其他可变类型,通过值而非对象编号进行比较的值,其原因在于高效的字典实现需要使用键的哈希值以保持一致性。用作键的数字类型遵循正常的数字比较规则: 如果两个数字相等 (例如
1
和1.0
) 则它们均可来用来索引同一个字典条目。字典会保留插入顺序,这意味着键将以它们被添加的顺序在字典中依次产生。
替换某个现有的键不会改变其顺序,但是移除某个键再重新插入则会将其添加到末尾而不会保留其原有位置。
字典是可变的;它们可通过
{...}
标注来创建 (参见 字典显示 小节)。扩展模块
dbm.ndbm
和dbm.gnu
提供了额外的映射类型示例,collections
模块也是如此。在 3.7 版更改: 在 Python 3.6 版之前字典不会保留插入顺序。 在 CPython 3.6 中插入顺序会被保留,但这在当时被当作是一个实现细节而非确定的语言特性。
Ellipsis
此类型只有一种取值。是一个具有此值的单独对象。此对象通过字面值
...
或内置名称Ellipsis
访问。它的逻辑值为真。
NotImplemented
此类型只有一种取值。 是一个具有该值的单独对象。 此对象通过内置名称
NotImplemented
访问。 数值方法和丰富比较方法如未实现指定运算符表示的运算则应返回该值。 (解释器会根据具体运算符继续尝试反向运算或其他回退操作。) 它不应被解读为布尔值。详情参见 实现算术运算。
在 3.9 版更改: 作为布尔值来解读
NotImplemented
已被弃用。 虽然它目前会被解读为真值,但将同时发出DeprecationWarning
。 它将在未来的 Python 版本中引发TypeError
。
None
此类型只有一种取值。是一个具有此值的单独对象。此对象通过内置名称
None
访问。在许多情况下它被用来表示空值,例如未显式指明返回值的函数将返回 None。它的逻辑值为假。