diveintopython.org
Python for experienced programmers

1.9. 序列 101

序列是不可变列表。一旦创建了一个序列就不能以任何方式改变它。

例 1.21. 定义序列

>>> t = ("a", "b", "mpilgrim", "z", "example") 1
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t[0]                                       2
'a'
>>> t[-1]                                      3
'example'
>>> t[1:3]                                     4
('b', 'mpilgrim')
1 序列的定义同列表的定义方式相同,除了整个元素集是用小括号包围的而不是方括号。
2 序列的元素象列表一样按定义的次序进行排序。序列的索引象列表一样从0开始,所以一个非空序列的第一个元素总是 t[0]
3 负数索引象列表一样从序列尾部开始计数。
4 分片也可以使用,就象列表一样。注意当分割一个列表时,会得到一个新的列表;当分割一个序列时,会得到一个新的序列。

例 1.22. 序列没有方法

>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t.append("new")    1
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z")      2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("example") 3
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'
>>> "z" in t           4
1
1 你不能向序列增加元素。序列没有 appendextend 方法。
2 你不能从序列中除掉元素。序列没有 remove pop 方法。
3 你不能在序列中查找元素。序列没有 index 方法。
4 然而,你可以使用 in 来看一看是否一个元素存在于序列中。

那么序列有什么好处呢?

Note
序列可以转化成列表,反之亦然。内置的 tuple 函数接收一个列表,返回一个有着相同元素的序列。而 list 函数接收一个序列,返回一个列表。从效果上看,tuple 冻结一个列表,而 list 解冻一个序列。

进一步阅读

脚注

[2] 实际上,事情要比那更复杂。字典关键字必须是不可变的。序列本身是不可改变的,但是如果你有一个列表的序列,那就认为是可变的了,并且在字典中用作关键字是不安全的。只有字符串,数字,或其它字典安全的序列才可以用作字典关键字。