Python - 删除相反顺序的列表重复项

时间:2018-05-03 09:14:33

标签: python

有关解决我在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'])

提前致谢!

3 个答案:

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