2013-12-09 108 views
3

是否有办法从列表中删除重复的子列表,即使它们不是相同的排序?Python:从列表中删除子列表(如果包含/不包含订单)

所以我可以做类似化妆:

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

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

是否有itertools功能或某事与一个循环?

谢谢!

+0

请问你曾经有区别'[1,1,2]''从[1,2,1]'?你需要保留子列表的初始顺序吗? – DSM

+2

另外,返回列表的顺序是否重要? –

+0

@DSM是的,子列表的长度可能会增加。不,订单并不重要。 – 5813

回答

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:这保留了尽可能多的原始信息(不像我的OrderedDict方法),并且似乎满足OP的需求。 – DSM

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]] 
>>> 
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]]