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
来做各种分组统计,比如:
-
按类型分组处理对象;
-
对已排序的日志数据按日期分组;
-
对字符流按重复字符分组等等。