假设我有一个结构对象:
class Obj:
def match(other):
return check_match(self, other)
例如,check_match
可以检查重叠或平等,或者"是朋友"。
现在我将列出这些对象:
objList = create_random_list_of_Obj()
现在,对于与其他元素匹配的每个元素,我想只保留其中一个相互匹配的元素。
备注和澄清: 到目前为止,任务是模棱两可的:如果A和B匹配,B和C匹配,但A和C不匹配,那么我们可以保留A和C,或者我们可以保留B.它不重要,哪个决定算法将采取。 重要的是,最终列表中没有匹配的元素。
两个问题:
答案 0 :(得分:3)
pythonic方法是将match
方法重命名为__eq__
。
然后,您可以使用自定义对象执行element in list
之类的操作。
制作列表包含唯一项目的一种非常pythonic方式是:
uniques = list(set(list_with_duplicates))
修改: __ne__
不需要,默认为not __eq__()
人们可以寻找"等价类"。
一些参考文献:
__eq__
:Elegant ways to support equivalence ("equality") in Python classes __eq__
上的stdlib文档:https://docs.python.org/3/reference/datamodel.html#object.eq element in list
如何在幕后工作:https://docs.python.org/3/reference/expressions.html#membership-test-details 答案 1 :(得分:-2)
Python有一种contains
方法,可以使用以下语法:if x in y:
使用它来确定列表是否包含obj
a = ["a", "b", "c", "d", "d"]
b = ["c", "c", "d", "e", "f"]
c = []
for member in a:
if member in b and member not in c:
c.append(member)
应该导致c = ["c", "d"]