首页 > 解决方案 > python groupby使用比较器函数/ lambda而不是键函数

问题描述

我有一个整数列表

l = [17811, 17831, 17843, 28996, 37606, 44325, 44365, 44387]

我想返回彼此相距一定距离的组,比如 30:

[[17811, 17831, 17843], [28996], [37606], [44325], [44365, 44387]]

我想要一个允许我通过比较器的函数:

magic.groupby(l, lambda(a,b): abs(a-b) < 30)

有这么简单的表达吗?

标签: python

解决方案


您可以使用itertools.groupby自定义类:

import itertools
class Val:
   def __init__(self, _v):
     self.v = _v
   def __eq__(self, _obj):
     return abs(self.v - _obj.v) < 30

l = [17811, 17831, 17839, 28996, 37606, 44325, 44365, 44387]
result = [list(b) for _, b in itertools.groupby(l, key=Val)]

输出:

[[17811, 17831, 17839], [28996], [37606], [44325], [44365, 44387]]

推荐阅读