有关解决我在Python中遇到的问题的任何想法......
我有一个嵌套列表,其中包含重复但顺序相反的项目(顺序保持不变,但它们在中间切换):
links = [['a', 'b', 'c', 'd'], ['c', 'd', 'a', 'b'], ['e', 'f', 'g', 'h'], ['g', 'h', 'e', 'f']]
有没有人建议删除重复的最佳方法,所以我最终得到:
links = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
我想检测副本并将其删除,第一个实例需要保持完全相同且顺序相同,所以在上面的示例中我将删除列表项1([' c' ,'' a'' b'])和3([' g',' h' ,' e' f'])
提前致谢!
答案 0 :(得分:0)
您可以先对列表中的所有项目进行排序并转换为字符串:
l = [ "".join(sorted(l)) for l in links ]
转换允许您使用'set'来保证不重复:
l = list(set(l))
最后,将字符串转换回字符列表:
l = [ list(l) for l in l ]
答案 1 :(得分:0)
与其他响应类似但保持原始列表的顺序。
def get_uniques(links):
my_set = set([])
my_selection = []
for l in links:
s = "".join(sorted(l))
if not s in my_set:
my_set.add(s)
my_selection.append(l)
return my_selection
一种神秘的单线式(可能更有效率):
scheck = set()
survivers = [ (l, scheck.add("".join(sorted(l))) )
for l in links if not "".join(sorted(l)) in scheck ]
result = [a for a, _ in survivers]
答案 2 :(得分:0)
首先对列表元素进行排序,然后删除重复项。 找到我的代码,listfinal代表你的答案。
links = [['a', 'b', 'c', 'd'], ['c', 'd', 'a', 'b'], ['e', 'f', 'g', 'h'],
['g', 'h', 'e', 'f']]
links1=[]
for elements in links:
elements=sorted(elements)
links1.append(elements)
# print links1
linksfinal=[list(t) for t in set(tuple(element) for element in links1)]
print linksfinal