一、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功能,我們可以方便地對數據進行分組求和,並進行相應的數據可視化。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197528.html