<< >>

diveintopython.org |

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` 解冻一个序列。

进一步阅读 |

- How to Think Like a Computer Scientist 讲解了序列，并且展示了如何 连接序列。
- Python Knowledge Base 展示了如何 排序一个序列。
- Python Tutorial 展示了如何 用一个元素定义序列。

脚注 |

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

« 列表 101 | 定义变量 »