一、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,每个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来实现分组求和。
- 选中需要进行分组求和的数据
- 点击Insert -> PivotTable
- 在弹出的窗口中,选择需要进行分组求和的范围,然后点击OK
- 在弹出的窗口中,将需要进行分组求和的字段拖拽到Row Labels和Values中
- 在弹出的窗口中,将Values中的求和方式改为需要的方式
通过Excel的PivotTable功能,我们可以方便地对数据进行分组求和,并进行相应的数据可视化。
最新评论