一日一技:使用 itertools.groupby 对已排序整数列表中的连续整数进行分组

共 1551字,需浏览 4分钟

 ·

2023-08-17 00:20

栏目介绍

本栏目主要介绍 Python 的日常使用小技巧,希望能帮助大家利用一些碎片时间,掌握提高日常效率的方法~

使用 itertools.groupby 对已排序整数列表中的连续整数进行分组

这次我们来看一个使用 itertools.groupby 的例子。

场景:我们有一个包含已排序整数的列表,我们想要将连续的整数分组。

原始已排序整数列表:

numbers = [123678111213141718212223]

不使用 itertools.groupby 的方法:

groups = []
current_group = [numbers[0]]

for i in range(1, len(numbers)):
    if numbers[i] == numbers[i - 1] + 1:
        current_group.append(numbers[i])
    else:
        groups.append(current_group)
        current_group = [numbers[i]]

groups.append(current_group)
print(groups)

使用 itertools.groupby 的方法:

from itertools import groupby

groups = []
for k, g in groupby(enumerate(numbers), lambda x: x[1] - x[0]):
    groups.append([item[1for item in g])

print(groups)

在这个例子中,我们使用了 itertools.groupby 函数,它可以帮助我们轻松地根据某个条件对已排序的序列进行分组。这使得代码更加简洁。

itertools.groupby 函数接受两个参数:一个已排序的可迭代对象(如列表)和一个可选的键函数。它返回一个迭代器,该迭代器产生由键函数产生的唯一键和对应的元素组成的元组。在这个例子中,我们使用了 lambda x: x[1] - x[0] 作为键函数,将具有相同差值的连续整数分为一组。

在使用 itertools.groupby 时,需要确保代码仍具有可读性,避免在复杂情况下使用这个函数导致代码难以理解。同时,请注意,itertools.groupby 函数要求输入的可迭代对象是已排序的。


浏览 134
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报