从列表中删除重复的等价 类
Removing duplicate equivalence classes from a list
我正在寻找一种获取元素列表的方法,其中一些可能是 "equivalent",而 return 是一个没有等效元素的列表。我的粗略尝试是这样的:
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 的意义上)应该工作相同。
您可以使用集合轻松删除任何重复项。
unique = list(set(unique))
set(unique)
将创建一个集合,根据定义,该集合不能包含任何重复。调用 list()
会将返回的集合变回列表。这不是必需的,取决于您之后打算用它做什么。
根据评论中的内容,这里是代码的改进和更正版本。它只比您的原始代码好一点。
unique = []
for item1 in mylist:
for item2 in unique:
if are_these_equivalent(item1, item2):
break
else:
unique.append(item1)
在我看来,您可能正在寻找 "Set"?
也许是这样的?
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()
时,你可以给它传递一个可迭代对象(一个列表)
它只会包含一次值。如果他们再次出现在列表中,他们将被忽略。
我正在寻找一种获取元素列表的方法,其中一些可能是 "equivalent",而 return 是一个没有等效元素的列表。我的粗略尝试是这样的:
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 的意义上)应该工作相同。
您可以使用集合轻松删除任何重复项。
unique = list(set(unique))
set(unique)
将创建一个集合,根据定义,该集合不能包含任何重复。调用 list()
会将返回的集合变回列表。这不是必需的,取决于您之后打算用它做什么。
根据评论中的内容,这里是代码的改进和更正版本。它只比您的原始代码好一点。
unique = []
for item1 in mylist:
for item2 in unique:
if are_these_equivalent(item1, item2):
break
else:
unique.append(item1)
在我看来,您可能正在寻找 "Set"?
也许是这样的?
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()
时,你可以给它传递一个可迭代对象(一个列表)
它只会包含一次值。如果他们再次出现在列表中,他们将被忽略。