从列表中删除重复的等价类

时间:2017-05-01 03:21:34

标签: python list distinct-values

我正在寻找一种方法来获取元素列表,其中一些可能是“等效的”,并返回一个没有等效元素的列表。我粗略的尝试是这样的:

unique = []
for item1 in mylist:
    include = 1
    for item2 in unique:
      if are_these_equivalent(item1, item2):
        include = 0
        break        #no need to examine anymore items
    if include == 1:
      unique.append(item1)

我猜算在算法上没有太多工作要做,但感觉代码有点混乱。有没有很好的方法来修饰它?

修改: 我使用的等价是两个排列是否在S_n中是共轭的,但是等价的任何抽象(在equivalence classes意义上)都应该是相同的。

3 个答案:

答案 0 :(得分:2)

根据评论中的内容,这里是代码的改进和更正版本。它只比原始代码好一些。

unique = []
for item1 in mylist:
  for item2 in unique:
    if are_these_equivalent(item1, item2):
      break
  else:
    unique.append(item1)

答案 1 :(得分:0)

您可以使用集合轻松删除任何重复项。

unique = list(set(unique))

set(unique)会创建一个集合,根据定义,它不能包含任何重复。在其上调用list()会将返回的集合重新置于列表中。这不是必需的,取决于你打算用它做什么。

答案 2 :(得分:-1)

在我看来,你可能正在寻找一套“套装”?

或许这样的事情?

my_list = [1,2,3,4,5,2,3,5,6,
           'apples', 'apples', 'oranges', 'bananas', 'oranges']

unique = [i for i in set(my_list)]
print unique

当然,当你使用set()时,你可以传递一个可迭代的(列表) 它只包含一次值。如果它们再次出现在列表中,则会被忽略。