如何在Python中使用对象的equals()方法正确比较含重复元素的无序对象列表
如何在Python中使用对象的equals()方法正确比较含重复元素的无序对象列表
我现在有个自带.equals()方法的类,想要写个函数判断两个无序的该类对象列表是否不相等(不相等返回True,相等返回False)。
最开始我写了这么个嵌套循环的实现:
def objectListsNotEqual(list_1, list_2): if(len(list_1) != len(list_2)): return True # 长度相同,开始逐一检查 for obj_1 in list_1: if(not(any(obj_1.equals(obj_2) for obj_2 in list_2))): return True for obj_2 in list_2: if(not(any(obj_2.equals(obj_1) for obj_1 in list_1))): return True # 执行到这一步说明两个列表完全匹配 return False
但这个实现有个大问题:它没法处理两个列表中,被.equals()判定为相等的对象数量不一致的情况。举个具体的例子:
list_1 = [obj_1(foo), obj_2(foo), obj_3(bar)] list_2 = [obj_4(foo), obj_5(bar), obj_6(bar)] objectListsNotEqual(list_1, list_2) # 因为用了any(),现在错误地返回False
在这个例子里,list_1里有2个匹配foo的对象、1个匹配bar的对象;list_2里是1个foo、2个bar,明显两个列表不相等。我希望这个函数能返回True(符合“列表不相等”的判断),但现在它错误地返回了False——原因就是any()只要找到一个匹配就会返回True,完全没考虑相同匹配结果的对象数量差异。
补充说明:我用到的类是Polyline,基于Geometry对象实现的,不太清楚它的内部逻辑。
备注:内容来源于stack exchange,提问作者sushi
相关产品推荐
相关产品推荐

