一、groupby函數概述
groupby函數可以將一個序列按照指定的標準進行分組,返回一個根據分組的標準而創建的分組對象,可以通過循環迭代獲取分組和分組中的元素。groupby函數是itertools模塊的函數。
groupby函數的使用方法如下:
import itertools
key_func = lambda x: x[0]
grouped_data = itertools.groupby(iterable, key_func)
for key, group in grouped_data:
for item in group:
# do something with item
其中,iterable是要分組的序列,可以是列表、元組、生成器等可迭代對象;key_func是指定分組的標準,它是一個函數,接收一個元素作為參數,返回一個表示分組標準的值;grouped_data是分組後的對象,它包含了分組後的每個子集和對應的鍵。
二、groupby函數的應用場景
1.分組統計
groupby函數可以用於分組統計數據。假設我們有一個列表存儲了每個人的姓名、年齡和性別,我們可以使用groupby函數按照性別對其進行分組,並統計每個性別的人數和平均年齡。
import itertools
people = [('Alice', 25, 'F'), ('Bob', 30, 'M'), ('Charlie', 20, 'M'), ('David', 27, 'M'), ('Eve', 22, 'F')]
# 按照性別進行分組,並統計每個性別的人數和平均年齡
gender_func = lambda x: x[2]
grouped_data = itertools.groupby(sorted(people, key=gender_func), key_func=gender_func)
for gender, group in grouped_data:
count = 0
age_sum = 0
for person in group:
count += 1
age_sum += person[1]
avg_age = age_sum / count
print(f"Gender: {gender}, Count: {count}, Average Age: {avg_age}")
輸出結果為:
Gender: F, Count: 2, Average Age: 23.5
Gender: M, Count: 3, Average Age: 25.666666666666668
2.去除連續重複元素
groupby函數可以用於去除連續重複的元素。假設我們有一個列表,其中包含了連續的重複元素,我們可以使用groupby函數將其去重。
import itertools
data = [1, 1, 2, 2, 3, 3, 3, 4, 4, 5]
# 去除連續重複元素
grouped_data = itertools.groupby(data)
result = [k for k, g in grouped_data]
print(result) # [1, 2, 3, 4, 5]
3.按照指定長度分組
groupby函數可以用於按照指定長度對序列進行分組。假設我們有一個列表,我們想將其按照行切分成若干個小列表,我們可以使用groupby函數實現。
import itertools
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 按照長度為3進行分組
grouped_data = itertools.groupby(enumerate(data), key=lambda x: x[0] // 3)
result = [[x[1] for x in g] for k, g in grouped_data]
print(result) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
三、小結
groupby函數是一個非常強大的分組函數,可以應用於各種不同的場景。我們可以使用它進行分組統計、去重、按照指定長度分組等操作。在使用groupby函數時需要注意分組標準的設置,以及獲取分組結果的方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/257664.html