python - 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)
有这么简单的表达吗?
解决方案
您可以使用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]]