itertools.groupby
?是 Python 標準庫?itertools
?模塊中的一個函數,它的主要功能是對可迭代對象中相鄰的相同元素進行分組。
itertools.groupby(iterable, key=None)
?函數
作用:
將連續的(相鄰的)相同元素分組,返回?(key, group)
?的迭代器。
導入方式:
import itertools
參數說明:
-
iterable
:要進行分組的可迭代對象。 -
key
(可選):一個函數,用來指定分組依據;默認是元素本身。
注意事項:
-
它?不會自動排序或打亂順序,只會對連續相同 key 的元素進行分組。
-
所以通常配合?
sorted()
?使用,才能對非連續相同元素也正確分組。
基礎示例代碼:
import itertoolsdata = [1, 1, 2, 2, 2, 3, 1]for key, group in itertools.groupby(data):print(f"{key} -> {list(group)}")
輸出:
1 -> [1, 1]
2 -> [2, 2, 2]
3 -> [3]
1 -> [1]
注意最后又出現了一個?1 -> [1]
,因為?groupby
?是按“連續”的來分組的!
搭配?key
?使用示例:
比如我們對一組字符串按首字母分組:
data = ['apple', 'apricot', 'banana', 'blueberry', 'cherry']# 需要先排序,否則相同首字母不連續
data_sorted = sorted(data, key=lambda x: x[0])for key, group in itertools.groupby(data_sorted, key=lambda x: x[0]):print(f"{key} -> {list(group)}")
輸出:
a -> ['apple', 'apricot']
b -> ['banana', 'blueberry']
c -> ['cherry']
實用小技巧:
你可以用?groupby
?來做各種分組統計,比如:
-
按類型分組處理對象;
-
對已排序的日志數據按日期分組;
-
對字符流按重復字符分組等等。