2013-03-20 77 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]