Python代码实现列表分组计数

 更新时间:2021年11月11日 15:31:14   作者:Felix  
这篇文章主要介绍了Python代码实现列表分组计数,利用Python代码实现了使用分组函数对列表进行分组,并计算每组的元素个数的功能,需要的朋友可以参考一下

本篇阅读的代码片段来自于30-seconds-of-python。

1. count_by

def count_by(arr, fn=lambda x: x):
  key = {}
  for el in map(fn, arr):
    key[el] = 1 if el not in key else key[el] + 1
  return key

# EXAMPLES
from math import floor
count_by([6.1, 4.2, 6.3], floor) # {6: 2, 4: 1}
count_by(['one', 'two', 'three'], len) # {3: 2, 5: 1}


count_by根据给定的函数对列表中的元素进行分组,并返回每组中元素的数量。该使用map()使用给定函数映射给定列表的值。在映射上迭代,并在每次出现时增加元素数。

该函数使用not in判断目前字典中是否含有指定的key,如果不含有,就将该key加入字典,并将对应的value设置为1;如果含有,就将value加1。

2. 使用字典推导式

字典推导式有{ key_expr: value_expr for value in collection if condition }这样的形式。group_by函数中字典推导式的value_expr是一个列表,该列表使用了列表推导式来生成。即

{ key_expr: [x for x in collection2 if condition2] for value in collection1 if condition1 }


同时,我们可以看到根据group_by代码中的字典推导式,可能计算出key相同的项,根据Pyrhon中字典的类型的规则,key相同的,只保留最新的key-value对。实际上当key相同时,value值也一样。[el for el in lst if fn(el) == key]推导式的for语句中只有key一个变量。

>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 2}
>>> d
{'one': 1, 'two': 2, 'three': 3}
>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 22}
>>> d
{'one': 1, 'two': 22, 'three': 3}
>>>

这里也可以使用同样的方式,在分组之后直接获取列表长度。不过这种写法遍历了两次列表,会使程序效率变低。

def count_by(lst, fn):
  return {key : len([el for el in lst if fn(el) == key]) for key in map(fn, lst)}

3. 使用collections.defaultdict简化代码

class collections.defaultdict([default_factory[, ...]])


collections.defaultdict包含一个default_factory属性,可以用来快速构造指定样式的字典。

当使用int作为default_factory,可以使defaultdict用于计数。因此可以直接使用它来简化代码。相比字典推导式的方法,只需要对列表进行一次循环即可。

 from collections import defaultdict

def count_by(lst, fn):
  d = defaultdict(int)
  for el in lst:
    d[fn(el)] += 1
  return d


当使用 list 作为 default_factory时,很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典。

def group_by(lst, fn):
  d = defaultdict(list)
  for el in lst:
    d[fn(el)].append(el)
  return d

# EXAMPLES
from math import floor
group_by([6.1, 4.2, 6.3], floor) # {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) # {3: ['one', 'two'], 5: ['three']}

到此这篇关于Python代码实现列表分组计数的文章就介绍到这了,更多相关Python列表分组计数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python处理mat文件的三种方式小结

    Python处理mat文件的三种方式小结

    这篇文章主要介绍了Python处理mat文件的三种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python使用missingno模块轻松处理数据缺失

    Python使用missingno模块轻松处理数据缺失

    missingno是一个基于Python的开源数据可视化工具,旨在帮助数据分析师和科学家更好地理解和处理数据缺失,下面我们就来看看如何使用missingno处理数据缺失吧
    2024-02-02
  • python多线程中的定时器你了解吗

    python多线程中的定时器你了解吗

    这篇文章主要为大家介绍了python多线程中的定时器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • python批量修改xml属性的实现方式

    python批量修改xml属性的实现方式

    这篇文章主要介绍了python批量修改xml属性的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python中的classmethod与staticmethod

    python中的classmethod与staticmethod

    这篇文章主要介绍了python中的classmethod与staticmethod,
    2022-01-01
  • opencv深入浅出了解机器学习和深度学习

    opencv深入浅出了解机器学习和深度学习

    机器学习是人工智能的核心,专门研究如何让计算机模拟和学习人类的行为。 深度学习是机器学习中的一个热门研究方向,它主要研究样本数据的内在规律和表示层次,让计算机能够让人一样具有分析与学习能力
    2022-03-03
  • python numpy实现多次循环读取文件 等间隔过滤数据示例

    python numpy实现多次循环读取文件 等间隔过滤数据示例

    这篇文章主要介绍了python numpy实现多次循环读取文件 等间隔过滤数据示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python入门必读的if语句嵌套方法

    Python入门必读的if语句嵌套方法

    这篇文章主要介绍了Python入门必读的if语句嵌套,基于前面章节介绍的3种形式的条件语句,即if、if else和if elif else展开Python if 语句嵌套的相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • Python3.x+pycharm+Anaconda中缩小打包的.exe体积的问题

    Python3.x+pycharm+Anaconda中缩小打包的.exe体积的问题

    这篇文章主要介绍了Python3.x+pycharm+Anaconda中缩小打包的.exe体积的问题,本文通过图文实例相结合给大家分享解决方案,需要的朋友可以参考下
    2021-08-08
  • python psutil库安装教程

    python psutil库安装教程

    这篇文章给大家介绍了python psutil库安装教程,首先要确认本机已安装python环境,具体安装过程大家参考下本文
    2018-03-03

最新评论