python groupby使用comparator函数/lambda代替key函数
我有一个INT列表python groupby使用comparator函数/lambda代替key函数,python,Python,我有一个INT列表 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) magic.groupby(l,l
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)
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)]
您可以将
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)]
如果一个数字属于两组,例如:[1,29,58]?您预期的行为是什么?组中所有成员的abs距离是否都应小于30,或者当组中其他成员的abs距离小于30时,是否应包含一个元素?如果单个数字属于两个组,例如:[1、29、58]?您预期的行为是什么?如果组中的所有成员的abs距离都小于30,或者当组中的其他成员的abs距离小于30时,是否应包含一个元素?@kaya3是正确的,奇怪的相等可以导致奇怪的结果:@kaya3是正确的,奇怪的相等可以导致奇怪的结果: