「这是我参与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 语言中的类型 |
本文转载自: 掘金