我们看到列表和字符串有许多相同的属性,例如索引和切片操作符。以下是两个关于序列数据类型的例子。由于python是一种不断演变的语言,其他的序列数据类型可以被添加。现在已经有一种标准的序列数据类型:元组
一个元组是由一些被逗号分隔的熟知组成的。例如:
>>> t = 12345, 54321, ’hello!’
>>> t[0]
12345
>>> t
(12345, 54321, ’hello!’)
>>> # 元组也可以嵌套
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, ’hello!’), (1, 2, 3, 4, 5))
>>> # 元组是不可变的
... t[0] = 88888
Traceback (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])
正如你看到的,当输出时元组常常被括号括起来,因此嵌套元组可以被正确解释。尽管常在输入时候用括号把它们包围,但是包或不包含都可以输入。 不可以对元组中的单个对象赋值,但是创建包含可变的对象的元组,比如列表。
尽管元组与列表有点相似,但是常常在不同情况和因不同的目的而使用。元组是不可变的,常常包含一个可以通过取出和索引访问元素的异构序列。列表是可变的,并且这些元素都是平等的,只能通过遍历逐次访问。
一个特殊的问题就是仅包含一个或空的元组的构建。为了符合这些规则,这语法有点特别之处。每个空元组可以被一对空括号所创建。含一个值的元组可以用一个值加上”,”进行创建。 (用括号包围单个值没有意义)。尽管看起来很丑陋,但是很有效的。例如:
>>> empty = ()
>>> singleton = ’hello’, # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
(’hello’,)
语句 t = 12345, 54321, ’hello!’ 是一个包含不同值的元组例子:值是 12345, 54321
and ’hello!’都放在同一个元组中。
翻转元组的操作可以如下:
>>> x, y, z = t
序列拆封要求左侧的变量数目与序列的元素个数相同。要注意的是可变参数其实只是元组封装和序列拆封的一个结合!