一、序列类型
有三种基本序列类型:list, tuple 和 range 对象
- 列表(list)
[element1,...,elementn]
: 中括号将元素括起来, 每个元素使用逗号(,)隔开
- 元组(tuple)
(element1,.., elementn)
: 圆括号括起来, 每个元素使用逗号(,)隔开. 逗号(,)是标识. 只要元素之间有逗号, 视为元组
- range对象
range(start, end, step)
: start, 开始值; end, 结束, 不包括; step: 步长
二、通用操作
按优先级升序列出了序列操作
in
和 not in
操作具有与比较操作相同的优先级。 +
(拼接) 和 *
(重复) 操作具有与对应数值运算相同的优先级
x in s
: 如果s
中的某项等于x
则结果为 True,否则为 False- 虽然 in 和 not in 操作在通常情况下仅被用于简单的成员检测,某些专门化序列 (例如 str, bytes 和 bytearray) 也使用它们进行子序列检测
>>> li = [1, 2, 3, 4, 5]
>>> 3 in li
True
>>> 8 in li
False
x not in s
: 如果s
中的某项等于x
则结果为 False,否则为 True- 虽然 in 和 not in 操作在通常情况下仅被用于简单的成员检测,某些专门化序列 (例如 str, bytes 和 bytearray) 也使用它们进行子序列检测
>>> li = [1, 2, 3, 4, 5]
>>> 8 not in li
True
>>> 3 not in li
False
s + t
:s
与t
相拼接- 拼接不可变序列总是会生成新的对象。 这意味着通过重复拼接来构建序列的运行时开销将会基于序列总长度的乘方
- 替代方法
*str
对象: 构建一个列表并在最后使用 str.join() 或是写入一个 io.StringIO 实例并在结束时获取它的值
* 如果拼接tuple
对象,请改为扩展list
类 - 某些序列类型 (例如 range) 仅支持遵循特定模式的项序列,因此并不支持序列拼接或重复。
>>> li = [1, 2, 3, 4, 5]
>>> t = [6, 7, 8]
>>> li + t
[1, 2, 3, 4, 5, 6, 7, 8]
s * n 或 n * s
: 相当于s
与自身进行n
次拼接- 某些序列类型 (例如 range) 仅支持遵循特定模式的项序列,因此并不支持序列拼接或重复。
>>> li = [1, 2, 3, 4, 5]
>>> li * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
s[i]
:s
的第i
项,起始为 0
>>> li = [1, 2, 3, 4, 5]
>>> li[2]
3
s[i:j]
:s
从i
到j
的切片,j
不包含在切片中
>>> li = [1, 2, 3, 4, 5]
>>> li[2]
3
>>> li[1:3]
[2, 3]
>>> li[1:4:2]
[2, 4]
s[i:j:k]
:s
从i
到j
步长为 k 的切片,j
不包含在切片中len(s)
:s
的长度
>>> li = [1, 2, 3, 4, 5]
>>> len(li)
5
min(s)
:s
的最小项
>>> li = [1, 2, 3, 4, 5]
>>> min(li)
1
>>> max(li)
5
max(s)
:s
的最大项s.index(x[, i[, j]])
:x
在s
中首次出现项的索引号(索引号在i
或其后且在j
之前)
>>> li = [1, 2, 3, 4, 5]
>>> li.index(2)
1
s.count(x)
:x
在s
中出现的总次数
>>> li = [1, 2, 3, 4, 5]
>>> li.count(2)
1
三、列表的操作方法
列表时可变序列类型
list.append(x)
: 在列表的末尾添加一个元素
>>> li = ['chick', 'name']
>>> li.append("hell")
>>> li
['chick', 'name', 'hell']
list.extend(iterable)
: 使用可迭代对象中的所有元素来扩展列表
>>> li = ['chick', 'name', 'hell']
>>> li.extend("python")
>>> li
['chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
list.insert(i, x)
: 在给定的位置插入一个元素。第一个参数是要插入的元素的索引, 第二个参数是要插入的值
>>> li = ['chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
>>> li.insert(0, "la")
>>> li
['la', 'chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
list.remove(x)
: 移除列表中第一个值为 x 的元素。如果没有这样的元素,则抛出 ValueError 异常
>>> li = ['la', 'chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
>>> li.remove("la")
>>> li
['chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
list.pop([i])
: 删除列表中给定位置的元素并返回它, 默认删除末尾最后一个元素
>>> li = ['chick', 'name', 'hell', 'p', 'y', 't', 'h', 'o', 'n']
>>> li.pop()
'n'
>>> li.pop(0)
'chick'
>>> li
['name', 'hell', 'p', 'y', 't', 'h', 'o']
list.clear()
: 移除列表中的所有元素
list.index(x[, start[, end]])
: 返回列表中第一个值为 x 的元素的从零开始的索引. 如果没有这样的元素将会抛出 ValueError 异常
>>> li = ['name', 'hell', 'p', 'y', 't', 'h', 'o']
>>> li.index("p")
2
>>> li.index("x")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'x' is not in list
list.count(x)
: 返回元素 x 在列表中出现的次数
>>> li = ['name', 'hell', 'p', 'y', 't', 'h', 'o']
>>> li.count("p")
1
list.sort(key=None, reverse=False)
: 对列表中的元素进行排序, key, 指定按某个类型排序; reverse, 是否反序
>>> li = ['name', 'hell', 'p', 'y', 't', 'h', 'o']
>>> li.sort(key=str, reverse=True)
>>> li
['y', 't', 'p', 'o', 'name', 'hell', 'h']
>>> li = ['y', 't', 'p', 'o', 'name', 'hell', 'h']
>>> li.sort(key=str)
>>> li
['h', 'hell', 'name', 'o', 'p', 't', 'y'
list.reverse()
: 翻转列表中的元素
>>> li = ['h', 'hell', 'name', 'o', 'p', 't', 'y']
>>> li.reverse()
>>> li
['y', 't', 'p', 'o', 'name', 'hell', 'h']
list.copy()
: 返回列表的一个浅拷贝,等价于 a[:]
四、元组的操作方法
元组时不可变序列类型
tuple.count(value)
: 返回value出现的次数tuple.index(value, start=0, stop=9223372036854775807)
: 返回value的第一个索引, 如果值不存在,会引发ValueError