序列 – Python Sequence
Sequence
必須足以下條件:
- 物件的集合
- countable
- zero based indexing (
__getitem__
) - 為什麼 index 要從0開始?
- 0 based: 0 <= n < len(s)
- 1 based: 1 <= n < len(s) + 1 Upper bound 用小於的原因是計算長度時不須再+1
- 有序(positional ordering)
- 舉例來說 list 和 set 都是物件的容器,但 list 可以被排序, set 不行,因此 list 是 Sequence Type 而 set 不是
特性:
- Homogeneous vs Heterogeneous 同質即序列的物件型態必須是相同的
- Iterable vs non iterable 可以迭代的容器不一定是序列,如set
- Mutable vs Immutable Mutable sequence can be modified. 要注意的是在操作新序列的時候更動到原本的序列(in-place),如
reverse()
以 list 為例,這幾個操作皆為原地算法(inplace):
- l.clear()
- l.append()
- l.pop()
- l.extend()
- l.insert()
- l +=
- l *=
- l[somesliceobj] = 若是 concat(+)、repetition(*)、slicing 都是關聯至新的物件參考
要注意的是,容器序列(儲存物件參考)的 concat 和 repetition 有可能只是儲存多個相同物件的參考