只保留每组元素中彼此匹配的一个元素

时间:2016-07-05 16:13:53

标签: python

假设我有一个结构对象:

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.它不重要,哪个决定算法将采取。 重要的是,最终列表中没有匹配的元素。

两个问题:

  • 这样做的pythonic方式是什么?
  • 这个问题有名字吗?

2 个答案:

答案 0 :(得分:3)

关于:pythonic方式是什么?

pythonic方法是将match方法重命名为__eq__

然后,您可以使用自定义对象执行element in list之类的操作。

制作列表包含唯一项目的一种非常pythonic方式是:

uniques = list(set(list_with_duplicates))

修改: __ne__不需要,默认为not __eq__()

此问题是否有名称?

人们可以寻找"等价类"。

一些参考文献:

答案 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"]