📜  Python中的 itertools.groupby()(1)

📅  最后修改于: 2023-12-03 15:34:22.202000             🧑  作者: Mango

Python中的 itertools.groupby()

itertools.groupby(iterable, key=None) 是 Python 中十分有用的函数,可以将迭代器的相邻重复元素挑出来放在一起,形成一个统一的组(group),常用于数据分析、数据处理等场景。

参数说明
  • iterable:表示可迭代对象。
  • key:用于指定一个函数(callable),用来从迭代器上的元素中进行选择,以便后续根据这个返回值对相邻的元素进行分组。如果省略此参数,则将相邻的重复元素作为一组进行分组。
返回值

返回一个迭代器,每个元素都是由相同的 key 分组而成的迭代器。

使用示例

下面,我们通过代码举例说明:

from itertools import groupby

# 对相邻重复元素分组
data = [1, 1, 2, 3, 3, 3, 4]
for key, group in groupby(data):
    print(key, list(group))

输出结果为:

1 [1, 1]
2 [2]
3 [3, 3, 3]
4 [4]

在上面的示例代码中,groupby(data) 将 list 类型的数据 data 中的元素进行分组,由于 key 参数没有定义,故默认将相邻的重复元素放在一起进行分组。最后,通过 for 循环遍历输出每个分组内的元素,结果为:1 组是[1, 1],2 组是[2],3 组是[3, 3, 3],4 组是 [4]。

我们再来举个更复杂一点儿的例子:

from itertools import groupby

# 定义键函数,根据奇偶性分组
def key_fn(x):
    if x % 2 == 0:
        return "even"
    else:
        return "odd"

# 对奇偶数进行分组
data = [1, 4, 2, 5, 6, 3]
for key, group in groupby(data, key_fn):
    print(key, list(group))

输出结果为:

odd [1]
even [4, 2, 6]
odd [5, 3]

在上面的示例代码中我们自己定义了一个键函数 key_fn,将列表元素按照其奇偶性分组,最后得到的每组是相邻的奇数或相邻的偶数。

在实际项目中, itertools.groupby() 还是一个非常有用的库,优美而高效地处理数据。