Python序列元素计数的方法,你知道几种?

在Python脚本语言中,数据结构有许多种,常见的数据类型有:序列,映射与集合三大类型,其中序列又分为可变序列和不可变序列,可变序列有2类:列表(List)与字节数组(Byte Array)对象,不可变序列有3类:字符串(String),元组(Tuple)与字节(Byte)对象,映射主要以字典形式体现,集合主要分为可变集合Set与不可变集合(Frozen set)。我们在编写脚本时,或多或少使用上面的数据类型作为基本数据类型或自身的容器,既然是容器,必要时我们需要统计容器中各元素出现的次数。接下来,我给大家分享几种统计的方法。

>>> 统计color列表中各颜色的次数:

color = ['red', 'blue', 'red', 'green', 'blue', 'blue']

>>> 首先,我们构造一个空字典d,用来容纳各元素及其次数,然后使用for循环对color列表进行遍历,如果元素不在字典内,我们就对元素进行初始化赋值,对于后续重复出现的元素进行累加操作,这样就可以实现各元素次数的统计,如下图:

如果你不想初始化赋值,那么为了避免引发KeyError错误,我们需要使用dict.get方法代替,如下图:

使用dict.get.__doc__查询get方法的字符串文档可以看到,对于第一次不存在的值,该方法返回一个可选值,该值默认为None(如下图):

可替代地,你也可以使用dict.setdefault方法来统计各元素的次数,如下图:

使用dict.setdefault.__doc__查询setdefault方法的字符串文档可以看到,对于第一次不存在的值,该方法将其追加到字典中并返回可选值,这就是get和setdefault的主要区别(如下图):

当然,你也可以一次对所有元素进行初始化,然后再进行索引操作,如下图:

查询dict.fromkeys.__doc__文档字符串可以看到其解释,它将可迭代对象的元素变成字典的键,值都赋值为统一的初始值,如下图:

>>> 使用set方法对元素去重,直接使用字典解析获取各元素的次数,如下图:

>>> 使用collections模块的defaultdict类也可以统计各元素的次数(如下图)。

defaultdict类是字典dict的子类,第一个参数是工厂函数,是一个可调用的对象,默认值是None,第一次索引字典的key时,由于它不在映射中,因此工厂函数会自动创建一个初始入口,本例整型int的默认值0,如果是list,那么默认值为空列表[],如果是集合,默认是空集合{}等等,然后按照字典的方式对其进行计数,下图是它的文档字符串:

>>>使用collections模块的Counter类可以统计各元素的次数(如下图)。

这大概是最简单也是最便利的解决方式了,Counter类也是字典dict的子类,它接受一个可迭代的对象或者映射作为参数,生成的结果可以统计各元素的次数,当然它也可以获取前N最多计数次数,如下所示:

以上就是统计元素频数的几种方法,如果你有更好的方法,可以在底下留言说明,如果你想获取更多与此相关的Python知识,请查阅Python官方文档。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171219G0XVOI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券