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/zh-tw/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

發表回復

登錄後才能評論