「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
数组 array
如果需要一个只包含数字的列表, array.array 比 list 更高效,因为数组在背后存的并不是数字对象(如 float ),而是数字的机器翻译,也就是字节表述。这一点就跟 C 语言中的数组一样。
数组支持所有跟可变序列有关的操作,包括 .pop 、.insert 和 .extend 。另外,数组还提供从文件读取和存入文件的更快的方法,如 .frombytes 和 .tofile 。
array.array 第一个参数指明数组元素的数据类型。Python 不会允许你在数组里存放除指定类型之外的数据。
队列 deque
collections.deque 类(双向队列)是一个线程安全、可以快速从两端添加或者删除元素的数据类型( append 和 popleft 都是原子操作)。
如果想要有一种数据类型来存放“最近用到的几个元素”,deque 也是一个很好的选择。这是因为在新建一个双向队列的时候,你可以指定这个队列的大小,如果这个队列满员了,还可以从反向端删除过期的元素,然后在尾端添加新的元素。
方法比较
| 方法 | 列表 | 元组 | 数组 | 双向队列 | 说明 |
|---|---|---|---|---|---|
s__add__(s2) | 有 | 有 | 有 | s + s2 ,拼接 | |
s__iadd__(s2) | 有 | 有 | 有 | s += s2 ,就地拼接 | |
s.append(e) | 有 | 有 | 有 | 尾部添加一个新元素 | |
s.appendleft(e) | 有 | 尾部添加一个新元素 | |||
s.clear() | 有 | 有 | 删除所有元素 | ||
s.__contains__(e) | 有 | 有 | 有 | s 是否包含 e | |
s.copy() | 有 | 浅复制 | |||
s.__copy__() | 有 | 有 | 对 copy.copy 的支持 | ||
s.__deepcopy__() | 有 | 对 copy.deepcopy 的支持 | |||
s.count(e) | 有 | 有 | 有 | 有 | e 在 s 中出现次数 |
s.__delitem__(p) | 有 | 有 | 有 | 删除位于 p 的元素 | |
s.extend(it) | 有 | 有 | 有 | 把可迭代对象 it 追加到 s 尾部 | |
s.extendleft(it) | 有 | 把可迭代对象 it 追加到 s 头部 | |||
s.__getitem__(p) | 有 | 有 | 有 | 有 | 获取位于 p 的元素 |
s.__getnewargs__() | 有 | 在 pickle 中支持更加优化的序列化 | |||
s.index(e) | 有 | 有 | 有 | 找到 s 中 e 第一次出现的位置 | |
s.insert(p, e) | 有 | 有 | 在位置 p 之前插入元素 e | ||
s.__iter__() | 有 | 有 | 有 | 有 | 获取 s 的迭代器 |
s.__len__() | 有 | 有 | 有 | 有 | len(s) 元素个数 |
s.__mul__(n) | 有 | 有 | 有 | s * n , 重复拼接 | |
s.__imul__(n) | 有 | 有 | s *= n , 就地重复拼接 | ||
s.__rmul__(n) | 有 | 有 | 有 | n * s , 反向拼接 | |
s.pop([p]) | 有 | 有 | 有(无参) | 删除最后/位于 p 的元素并返回其值 | |
s.popleft() | 有 | 删除最前元素并返回其值 | |||
s.remove(e) | 有 | 有 | 有 | 删除 s 中第一次出现的 e | |
s.reverse() | 有 | 有 | 有 | 就地倒序 | |
s.__reversed__() | 有 | 有 | 有 | 返回倒序迭代器 | |
s.rotate(n) | 有 | 有 | 把 n 个元素从队列的一端移到另一端 | ||
s.__setitem__(p, e) | 有 | 有 | 有 | 将位置 p 替换为元素 e | |
s.sort([key], [reverse]) | 有 | 排序 | |||
s.byteswap | 有 | 翻转数组内每个元素的字节序列 | |||
s.frombytes(b) | 有 | 将压缩成机器值的字节序列读出来添加到尾部 | |||
s.fromfile(f,n) | 有 | 将二进制文件 f 内含有机器值读出来添加到尾部,最多添加 n 项 | |||
s.fromlist(l) | 有 | 将列表里的元素添加到尾部,如果其中任何一个元素导致了 TypeError 异常,那么所有的添加都会取消 | |||
s.tobytes() | 有 | 把所有元素的机器值用 bytes 对象的形式返回 | |||
s.tofile(f) | 有 | 把所有元素以机器值的形式写入一个文件 | |||
s.tolist() | 有 | 把数组转换成列表,列表里的元素类型是数字对象 | |||
s.typecode | 有 | 返回只有一个字符的字符串,代表数组元素在 C 语言中的类型 |