Python:如果包括/不包含订单,则从列表中删除子列表

时间:2013-12-09 03:34:40

标签: python list sublist

有没有办法从列表列表中删除重复的子列表,即使它们的顺序不同?

我可以做一些像make:

x = [[1,2],[3,4],[5,6],[2,1],[7,8]]

x = [[1,2],[3,4],[5,6],[7,8]]

是否有itertools函数或带有for循环的东西?

谢谢!

3 个答案:

答案 0 :(得分:3)

这将保留列表和子列表的顺序,并可能在子列表中重复:

y, s = [], set()
for t in x:
    w = tuple(sorted(t))
    if not w in s:
        y.append(t)
        s.add(w)

如果

x = [[1,2],[3,4],[5,6],[2,1,1],[2,1],[7,8],[4,3],[1,2,1]]

然后y将是:

[[1, 2], [3, 4], [5, 6], [2, 1, 1], [7, 8]]

答案 1 :(得分:1)

您可以使用frozenset

>>> def remove_dups(L):
        return map(list, frozenset(map(frozenset, L)))

>>> x = [[1,2],[3,4],[5,6],[2,1],[7,8]]
>>> remove_dups(x)
[[5, 6], [1, 2], [8, 7], [3, 4]]
>>> 

答案 2 :(得分:0)

试试这个:

a=[[1,2],[3,4],[5,6],[2,1],[7,8]]
y=[]
for i in a:
        if sorted(i) not in y:
                y.append(i)
print y

输出

[[1, 2], [3, 4], [5, 6], [7, 8]]