|
Python for experienced programmers |
1.9. 序列 101
序列是不可变列表。一旦创建了一个序列就不能以任何方式改变它。
例 1.21. 定义序列
>>> t = ("a", "b", "mpilgrim", "z", "example")
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t[0]
'a'
>>> t[-1]
'example'
>>> t[1:3]
('b', 'mpilgrim')
|
序列的定义同列表的定义方式相同,除了整个元素集是用小括号包围的而不是方括号。 |
|
序列的元素象列表一样按定义的次序进行排序。序列的索引象列表一样从0开始,所以一个非空序列的第一个元素总是
t[0]。 |
|
负数索引象列表一样从序列尾部开始计数。 |
|
分片也可以使用,就象列表一样。注意当分割一个列表时,会得到一个新的列表;当分割一个序列时,会得到一个新的序列。 |
例 1.22. 序列没有方法
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t.append("new")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("example")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'
>>> "z" in t
1
|
你不能向序列增加元素。序列没有 append 或 extend
方法。 |
|
你不能从序列中除掉元素。序列没有 remove 或 pop
方法。 |
|
你不能在序列中查找元素。序列没有 index 方法。 |
|
然而,你可以使用 in 来看一看是否一个元素存在于序列中。 |
那么序列有什么好处呢?
- 序列比列表操作速度快。如果你定义了一个值集合常量,并且唯一要用它做的是不断地遍历它,使用序列代替列表。
- 记得我说过字典关键字可以是整数,字符串和“几种其它的类型”吗?序列就是那些类型之一。序列可以在字典中被用作关键字,但是列表不行。[2]
- 序列用在字符串格式化,这一点我们会很快看到。
|
序列可以转化成列表,反之亦然。内置的 tuple
函数接收一个列表,返回一个有着相同元素的序列。而 list 函数接收一个序列,返回一个列表。从效果上看,tuple
冻结一个列表,而 list 解冻一个序列。 |
[2] 实际上,事情要比那更复杂。字典关键字必须是不可变的。序列本身是不可改变的,但是如果你有一个列表的序列,那就认为是可变的了,并且在字典中用作关键字是不安全的。只有字符串,数字,或其它字典安全的序列才可以用作字典关键字。