我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python代码实现列表分组计数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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列表分组计数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python代码实现列表分组计数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python代码然后实现列表分组计数

本篇文章给大家分享的是有关Python代码然后实现列表分组计数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. count_bydef count_by(arr, fn=la
2023-06-25

python如何实现分组相邻列表

小编给大家分享一下python如何实现分组相邻列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!分组相邻列表在for循环中,对相邻循环进行分组当然很容易,特别是使用zip(),但这肯定不是最好的方法。为了更轻松便捷地实现这
2023-06-27

python 的列表遍历删除实现代码

python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如l = [1,2,3,4] for i in l:if i != 4:l.remove(i) print l这几句话本来意图是想清空列
2022-06-04

python数组转换为列表怎么实现

要将Python中的数组转换为列表,可以使用Python内置的list()函数。该函数可以将序列类型的数据转换为列表。以下是一个示例,演示了如何将数组转换为列表:import numpy as np# 创建一个数组arr = np.arra
2023-10-23

Android列表实现(1)_数组列表实例介绍

最近开始学习android的ui,先上几个相关的例子,后续还会有更新。 代码如下:import android.app.ListActivity; import android.os.Bundle; import android.widg
2022-06-06

WPF实现列表分页控件的示例代码

这篇文章主要为大家详细介绍了如何利用WPF实现列表分页控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
2022-11-13

Python数据结构之栈、队列的实现代码分享

1. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶
2022-06-04

android二级listview列表实现代码

今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的。可能是因为平板屏幕比较大,而且也能展现更多的内容。 下
2022-06-06

Python之列表append()方法使用实例代码分析

这篇文章主要介绍“Python之列表append()方法使用实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python之列表append()方法使用实例代码分析”文章能帮助大家解决问题。
2023-07-04

Python 实现链表实例代码

Python 实现链表实例代码 前言 算法和数据结构是一个亘古不变的话题,作为一个程序员,掌握常用的数据结构实现是非常非常的有必要的。 实现清单 实现链表,本质上和语言是无关的。但是灵活度却和实现它的语言密切相关。今天用Python来实现一
2022-06-04

Python实现代码统计(代码+注释+空

# -*- coding: utf-8 -*-"""Created on Thu Apr 17 17:15:40 2014@author: author"""import os;path_head = '代码路径头部'path_list =
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录