【python】 列表、元组、数组、双向队列 方法对比

779 阅读3分钟

「这是我参与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 语言中的类型