我正在寻找一种方法来获取元素列表,其中一些可能是“等效的”,并返回一个没有等效元素的列表。我粗略的尝试是这样的:
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意义上)都应该是相同的。
答案 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()
时,你可以传递一个可迭代的(列表)
它只包含一次值。如果它们再次出现在列表中,则会被忽略。