5.3. Tuples and Sequences(元组和序列)

来源:互联网 发布:holy cross学院知乎 编辑:程序博客网 时间:2024/06/11 08:16

我们发现列表(list)跟字符串(str)有很多相似的地方,比方说爱吃下标访问和分片操作。事实上这两种数据类型是7种序列数据类型(包括str,unicode,list,tuple,bytearray,buffer,xrnage)中的两种。因为Python是一门在不断完善的语言,以后也可能加入新的序列类型。本节介绍一种新的序列类型,tuple(元组)。

用逗号分隔的一些值就是元组,例如:

>>> t = 12345, 54321, 'hello!'>>> t[0]12345>>> t(12345, 54321, 'hello!')>>> # Tuples may be nested:... u = t, (1, 2, 3, 4, 5)>>> u((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))>>> # Tuples are immutable:... t[0] = 88888Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment>>> # but they can contain mutable objects:... v = ([1, 2, 3], [3, 2, 1])>>> v([1, 2, 3], [3, 2, 1])

如聪明的你所见,输出的元组类型总是在一对圆括号里。而在输入的时候圆括号可以省略,事实上输入时的圆括号还是很有必要的(例如元组是一个更大表达式的一部分)。元组一旦创建,其内容不可修改,元组支持复杂的嵌套,像序列那样。

即使元组看起来跟列表很像,但他们经常用于不同的场合和不同的目的。元组不可改变,且包含的元素通常是不同类型的,经常用于序列解包(在后面章节会讲到),访问元素常用下标访问。而列表是可变的,其中的元素类型大多相同,且经常通过迭代元素访问。

特殊的情况是元组中只有1个或者没有元素:我们要用一些看起来有些奇怪的语法来做到这些。用一对圆括号来创建一个空元组;用一对圆括号中加一个元素和一个逗号来创建只含一个元素的元组(不能省略那个逗号)。看起来有些丑,但是有效。例如:

>>> empty = ()>>> singleton = 'hello',    # <-- note trailing comma>>> len(empty)0>>> len(singleton)1>>> singleton('hello',)

t = 12345, 54321, 'hello' 语句是一个元组打包的例子:12345, 54321, 'hello'这些值被打包进了一个元组。相反的操作也是可以的:

>>> x, y, z = t
这种操作叫序列解包,等号右边可以是任何序列类型。序列解包左边变量的个数和右边序列中的元素个数相同。复杂的赋值操作只是元组的打包和序列解包而已。


译者小结:

元组中的元素不可变,序列中的元素可变。

0 0
原创粉丝点击