2013-03-20 80 views
-3

的列表中给出A列出的清单:的Python:独特的名单

L = [[1,2,3], [3,4,5], [1,2,3]] 

如何得到一个列表,其中每个列表是独一无二的:

L = [[1,2,3], [3,4,5]] 

感谢

+5

你尝试过什么了吗?你如何定义唯一性? '[1,2,3]'是否与'[3,2,1]'相同? – thegrinner 2013-03-20 17:31:17

+0

大多数制作列表的解决方案只包含独特的元素,对于列表清单应该同样适用。 – drewmm 2013-03-20 17:33:00

+0

@thegrinner是的,我已经试过已经和谷歌搜索等一个答案,我找不到任何 – Mermoz 2013-03-20 19:31:13

回答

3

如果你不”无需关注子列表的顺序:

In [11]: list(map(list, set(map(tuple, L)))) 
Out[11]: [[3, 4, 5], [1, 2, 3]] 

更好的是,你可能应该转而使用一组元组作为你的数据结构。

+2

适应,要保留顺序: 'sort(map(list,set(map(tuple,L))),key = L.index)' – 2013-03-20 17:35:22

+0

@FJ:好戏。 – NPE 2013-03-20 17:35:50

+0

不是最有效的方法,但它很简洁。 – 2013-03-20 17:35:59

2

有点不知所措,但这怎么样?

[list(el) for el in set(tuple(el) for el in L)] 

它的工作原理是因为列表不能相互比较,但元组可以。

unhashable type: 'list' 
+0

小心,'list'可以相互比较'[1] == [1]'工作得很好。 'list'不可散列,因为它们是可变对象。 – mgilson 2013-03-20 17:40:43

+0

是的,那是错误的。幸运的是,你可以更多地取决于Python的错误信息 – 2013-03-20 17:44:48

1
L = [[1,2,3], [3,4,5], [1,2,3]] 
newlist = [] 
for item in L: 
    if item not in newlist: 
     newlist.append(item) 
+0

这会工作,但可以稍微低效率的时候'L'很大,因为每次有时间通过​​所有newlist'的'扫描每个'item'在'L' 。 – DSM 2013-03-20 17:39:45

0

可以转换成元组,然后返回一个列表:如果你想直接让一组从列表的列表错误消息给它了。

L = [[1,2,3], [3,4,5], [1,2,3]] 
setL = set(tuple(i) for i in L) 
newL = list(list(i) for i in setL) 
print newL 

[3,4,5],[1,2,3]