Collections模块中的高性能数据类型

Python中内置了4 种数据类型,列表(List),元组(Tuple),集合(Set),字典(Dict)。这些数据类型都有其各自的特性,但是有些特性,比如字典无序,在一定程度上对数据类型的使用产生了约束,在某些场景下效率会比较低,Python collections 属于对这些基础数据类型的补充模块。由于Python collections属于内建模块,因此不需要安装。

接下来,我们介绍一下Python collections模块常用的四种方法。

defaultdict:字典的子类,提供了一个工厂函数,为字典查询提供一个默认值。

orderedDict:字典的子类,保存了他们被添加的顺序。

deque:类似列表(List)的容器,实现了在两端快速添加(append)和删除(pop)。

Counter:字典的子类,提供了可哈希对象的计数功能。

*defaultdict*

我们在Python中使用字典时,当字典的键(Key)不存在时,直接添加值(Value)时会出现KeyError错误,示例如下。

img

使用defaultdict可以优雅的规避该错误,defaultdict 是对字典类型的补充,它可以给字典的值设置一个默认数据类型,当字典的键(Key)不存在时,可以自动生成相应默认类型的值(Value),示例如下:

img

在如上例子中,我们可以看到,即使defaultdict对象不存在某个键(Key)时,它会自动创建一个空列表。另外,同样的功能使用 defaultdict 比使用 dict.setdefault 方法快。

*orderedDict*

Python3.6 版本之前的字典是无序的,然而有些时候我们需要保持字典的有序性,跟踪到字典键(Key)添加先后顺序。orderedDict可以实现字典的有序性,即按照字典键(Key)插入的顺序来排列,这样就实现了一个先进先出的字典,当容量超出限制时,先删除最早添加的键(Key),示例如下:

img

我们需要注意的是,对于普通的字典,即使传入的顺序不一样,但是仍然是相同的字典;但如果是orderedDict,当传入的顺序不一样时,那么得到的字典是不一样的,示例如下:

img

*deque*

Python中的列表(List)是基于数组实现的,查找容易,但插入和删除操作时间复杂度较大。 deque实现了高效实现插入和删除操作的双向列表(也叫做双端队列),适合用于队列和栈,并且线程安全。

列表(List)只提供了appendpop方法,实现从列表(List)的尾部插入或删除元素。deque新增了appendleft、popleft 等方法可以更高效的在列表的开头插入或删除元素,示例如下:

img

*Counter*

Counter 属于字典的子类,主要作用是统计可哈希对象出现的次数。追踪元素出现的次数同时按照从高到低的顺序排列成字典,元素被作为字典的键(Key)存储,它们的计数作为字典的值(Value)存储,示例如下:

img

同时Counter内部提供了很多方法对结果进行处理,如most_common方法获取出现次数最多的前N个元素,如下:

img

版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创

转载请注明:出处来自王晨曦个人站点 » Collections模块中的高性能数据类型

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注