List分组求和

一、List分组求和

在处理数据的过程中,经常遇到从List中根据某一个属性进行分组,再对每个分组中的元素进行求和的需求。这时候我们可以先将List根据属性分组,然后对每个分组的元素进行求和即可。

    //定义一个Person类
    public class Person {
        private String name;
        private int age;
        private double salary;
        
        //getter & setter
    }
    
    //初始化List
    List personList = new ArrayList();
    
    //分组求和
    Map resultMap = personList.stream()
            .collect(Collectors.groupingBy(Person::getName, Collectors.summingDouble(Person::getSalary)));

上面的代码中,我们先定义一个Person类,包含姓名、年龄、工资三个属性。然后我们初始化一个Person列表,对其进行分组求和。

二、List分组求和jdk1.5

在jdk1.5中,我们可以使用普通的for循环和Map来实现List的分组求和。

    //初始化List
    List personList = new ArrayList();
    
    //分组求和
    Map resultMap = new HashMap();
    for (Person person : personList) {
        String name = person.getName();
        double salary = person.getSalary();
        if (resultMap.containsKey(name)) {
            resultMap.put(name, resultMap.get(name) + salary);
        } else {
            resultMap.put(name, salary);
        }
    }

上面的代码中,我们先初始化一个Person列表,然后使用Map来记录每个姓名对应的工资总和,最后得到分组求和的结果。

三、List分组求和BigDecimal

在进行金额的分组求和时,为了避免精度问题,我们可以使用BigDecimal来进行运算。

    //初始化List
    List personList = new ArrayList();
    
    //分组求和
    Map resultMap = new HashMap();
    for (Person person : personList) {
        String name = person.getName();
        BigDecimal salary = BigDecimal.valueOf(person.getSalary());
        if (resultMap.containsKey(name)) {
            resultMap.put(name, resultMap.get(name).add(salary));
        } else {
            resultMap.put(name, salary);
        }
    }

上面的代码中,我们先初始化一个Person列表,然后使用Map来记录每个姓名对应的工资总额,使用BigDecimal进行运算,避免精度问题。

四、List<Map>分组求和

在一些情况下,我们需要对List中的Map进行分组求和,这时候我们可以先将Map提取出需要分组的属性,然后进行分组求和。

    //初始化List
    List<Map> mapList = new ArrayList();
    
    //获取id和salary字段,按id分组求和
    Map resultMap = mapList.stream()
            .collect(Collectors.groupingBy(map -> map.get("id").toString(),
                    Collectors.summingDouble(map -> Double.parseDouble(map.get("salary").toString()))));

上面的代码中,我们先初始化一个List,其中包含多个Map,每个Map包含id和salary两个字段。我们将每个Map的id和salary提取出来,然后对id进行分组求和,并对每个分组的salary进行求和。

五、Python List分组求和

在Python中,我们可以使用defaultdict来实现List的分组求和。

    #初始化List
    person_list = [{"name": "Tom", "salary": 1000},
                   {"name": "Tom", "salary": 2000},
                   {"name": "Jerry", "salary": 1500}]
    
    #分组求和
    from collections import defaultdict
    
    result_dict = defaultdict(float)
    for person in person_list:
        name = person["name"]
        salary = person["salary"]
        result_dict[name] += salary

上面的代码中,我们先初始化一个Person列表,使用defaultdict来定义一个默认值为0的字典,然后使用普通的for循环来对List进行分组求和。

六、分组求和法

分组求和法是一种常用的数学方法,可以根据不同的数据特征,将数据分成不同的组别,再对每组数据进行求和运算。

例题:

一个班级有30个学生,他们的数学成绩分别为:42,75,85,65,90,78,56,33,88,67,72,86,75,60,76,92,78,66,85,76,56,78,90,68,55,97,78,82,74,59。

现在要将他们分成7组,分别求出每组学生的平均数。

    #初始化数据
    score_list = [42, 75, 85, 65, 90, 78, 56, 33, 88, 67, 72, 86, 75,
                  60, 76, 92, 78, 66, 85, 76, 56, 78, 90, 68, 55, 97,
                  78, 82, 74, 59]
    
    #分组求和
    group_num = 7
    sum_list = [0] * group_num
    num_list = [0] * group_num
    
    for score in score_list:
        group = int(score / 10)
        if group >= group_num:
            group = group_num - 1
        sum_list[group] += score
        num_list[group] += 1
    
    #求平均数
    avg_list = []
    for i in range(group_num):
        if num_list[i] == 0:
            avg_list.append(0)
        else:
            avg_list.append(float(sum_list[i]) / num_list[i])
            
    print(avg_list)

上面的代码中,我们首先初始化了一个30个元素的数学成绩列表,然后将其分成7组,再对每组数据进行求和运算,最后求出每组的平均数。

七、Excel分组求和

在Excel中,我们可以使用PivotTable来实现分组求和。

  1. 选中需要进行分组求和的数据
  2. 点击Insert -> PivotTable
  3. 在弹出的窗口中,选择需要进行分组求和的范围,然后点击OK
  4. 在弹出的窗口中,将需要进行分组求和的字段拖拽到Row Labels和Values中
  5. 在弹出的窗口中,将Values中的求和方式改为需要的方式

通过Excel的PivotTable功能,我们可以方便地对数据进行分组求和,并进行相应的数据可视化。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/197528.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-03 16:33
下一篇 2024-12-03 20:04

相关推荐

  • Tensor to List的使用

    Tensor to List是TensorFlow框架提供的一个非常有用的函数,在很多的深度学习模型中都会用到。它的主要功能是将TensorFlow中的张量(Tensor)转换为P…

    编程 2025-04-29
  • 如何使用Python将输出值赋值给List

    对标题进行精确、简明的解答:本文将从多个方面详细介绍Python如何将输出的值赋值给List。我们将分步骤进行探讨,以便读者更好地理解。 一、变量类型 在介绍如何将输出的值赋值给L…

    编程 2025-04-28
  • Python List查找用法介绍

    在Python中,list是最常用的数据结构之一。在很多场景中,我们需要对list进行查找、筛选等操作。本文将从多个方面对Python List的查找方法进行详细的阐述,包括基本查…

    编程 2025-04-28
  • Python DataFrame转List用法介绍

    Python中常用的数据结构之一为DataFrame,但有时需要针对特定需求将DataFrame转为List。本文从多个方面针对Python DataFrame转List详细介绍。…

    编程 2025-04-27
  • Python中list和tuple的用法及区别

    Python中list和tuple都是常用的数据结构,在开发中用途广泛。本文将从使用方法、特点、存储方式、可变性以及适用场景等多个方面对这两种数据结构做详细的阐述。 一、list和…

    编程 2025-04-27
  • 使用Flutter开发ToDo List App

    本文将会介绍如何使用Flutter开发一个实用的ToDo List App。ToDo List,即待办事项清单,是一种记录人们未处理工作和待办事项的方式。随着日常生活的快节奏,如此…

    编程 2025-04-27
  • list长度

    一、长度对内存和性能的影响 在Python中,list是一种基本的数据类型,它常常被用于存储数据。然而,当list的长度不断增加时,它对于内存和性能的影响也逐渐加重。 在处理大量数…

    编程 2025-04-25
  • List of Devices Attached是什么意思

    一、介绍 在Android应用程序开发中,List of Devices Attached这个术语是非常常见的。它的简称是LoDA,大多数情况下,我们可以看到这个缩写在Androi…

    编程 2025-04-25
  • Java List.Sort使用方法详解

    一、语法与功能 List.Sort() 方法用来对List中的元素进行排序,可以用 lambda 表达式或者 Comparator 实现自定义排序。调用 syntax 如下: Li…

    编程 2025-04-25
  • Python List 转字符串

    一、基本方法 Python List 转字符串的基本方法是使用join()方法。 list1 = [‘apple’, ‘banana’, ‘orange’] str1 = ”.j…

    编程 2025-04-24

发表回复

登录后才能评论