序列类型—list,tuple,range
通用序列操作
此表按优先级升序列出了序列操作。 在表格中,s 和 t 是具有相同类型的序列,n, i, j 和 k 是整数而 x 是任何满足 s 所规定的类型和值限制的任意对象。
in
和not in
操作具有与比较操作相同的优先级。+
(拼接) 和*
(重复) 操作具有与对应数值运算相同的优先级。
运算 | 结果: |
---|---|
x in s | 如果 s 中的某项等于 x 则结果为 True ,否则为 False |
x not in s | 如果 s 中的某项等于 x 则结果为 False ,否则为 True |
s + t | s 与 t 相拼接 |
s * n 或 n * s | 相当于 s 与自身进行 n 次拼接 |
s[i] | s 的第 i 项,起始为 0 |
s[i:j] | s 从 i 到 j 的切片 |
s[i:j:k] | s 从 i 到 j 步长为 k 的切片 |
len(s) | s 的长度 |
min(s) | s 的最小项 |
max(s) | s 的最大项 |
s.index(x[, i[, j]]) | x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) |
s.count(x) | x 在 s 中出现的总次数 |
相同类型的序列也支持比较。 特别地,tuple 和 list 的比较是通过比较对应元素的字典顺序。 这意味着想要比较结果相等,则每个元素比较结果都必须相等,并且两个序列长度必须相同。
可变序列的正向和逆向迭代器使用一个索引来访问值。 即使底层序列被改变该索引也将持续向前(或向后)步进。 迭代器只有在遇到
IndexError
或 aStopIteration
时才会终结(或是当索引降至零以下)。
"gg" in "eggs"
True
lists = [[]] * 3
lists
[[], [], []]
lists[0].append(3)
lists
[[3], [3], [3]]
lists = [[] for i in range(3)]
lists[0].append(3)
lists[1].append(5)
lists[2].append(7)
lists
不可变序列类型
不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对
hash()
内置函数的支持。这种支持允许不可变类型,例如
tuple
实例被用作dict
键,以及存储在set
和frozenset
实例中。尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致
TypeError
。
可变序列类型
以下表格中的操作是在可变序列类型上定义的。
表格中的 s 是可变序列类型的实例,t 是任意可迭代对象,而 x 是符合对 s 所规定类型与值限制的任何对象 (例如,
bytearray
仅接受满足0 <= x <= 255
值限制的整数)。
运算 | 结果: |
---|---|
s[i] = x | 将 s 的第 i 项替换为 x |
s[i:j] = t | 将 s 从 i 到 j 的切片替换为可迭代对象 t 的内容 |
del s[i:j] | 等同于 s[i:j] = [] |
s[i:j:k] = t | 将 s[i:j:k] 的元素替换为 t 的元素 |
del s[i:j:k] | 从列表中移除 s[i:j:k] 的元素 |
s.append(x) | 将 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x] ) |
s.clear() | 从 s 中移除所有项 (等同于 del s[:] ) |
s.copy() | 创建 s 的浅拷贝 (等同于 s[:] ) |
s.extend(t) 或 s += t | 用 t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t ) |
s *= n | 使用 s 的内容重复 n 次来对其进行更新 |
s.insert(i, x) | 在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x] ) |
s.pop() 或 s.pop(i) | 提取在 i 位置上的项,并将其从 s 中移除 |
s.remove(x) | 删除 s 中第一个 s[i] 等于 x 的项目。 |
s.reverse() | 就地将列表中的元素逆序。 |
列表是可变序列,通常用于存放同类项目的集合(其中精确的相似程度将根据应用而变化)。
元组是不可变序列,通常用于储存异构数据的多项集(例如由
enumerate()
内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set
或dict
的实例)。
range 对象
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
list(range(0, 10, 3))
[0, 3, 6, 9]
list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
list(range(0))
[]
list(range(1, 0))
[]
r = range(0, 20, 2)
r
range(0, 20, 2)
11 in r
False
10 in r
True
r.index(10)
5
r[5]
10
r[:5]
range(0, 10, 2)
r[-1]
18