的列表中給出A列出的清單:的Python:獨特的名單
L = [[1,2,3], [3,4,5], [1,2,3]]
如何得到一個列表,其中每個列表是獨一無二的:
L = [[1,2,3], [3,4,5]]
感謝
的列表中給出A列出的清單:的Python:獨特的名單
L = [[1,2,3], [3,4,5], [1,2,3]]
如何得到一個列表,其中每個列表是獨一無二的:
L = [[1,2,3], [3,4,5]]
感謝
如果你不」無需關注子列表的順序:
In [11]: list(map(list, set(map(tuple, L))))
Out[11]: [[3, 4, 5], [1, 2, 3]]
更好的是,你可能應該轉而使用一組元組作爲你的數據結構。
適應,要保留順序: 'sort(map(list,set(map(tuple,L))),key = L.index)' – 2013-03-20 17:35:22
@FJ:好戲。 – NPE 2013-03-20 17:35:50
不是最有效的方法,但它很簡潔。 – 2013-03-20 17:35:59
有點不知所措,但這怎麼樣?
[list(el) for el in set(tuple(el) for el in L)]
它的工作原理是因爲列表不能相互比較,但元組可以。
unhashable type: 'list'
小心,'list'可以相互比較'[1] == [1]'工作得很好。 'list'不可散列,因爲它們是可變對象。 – mgilson 2013-03-20 17:40:43
是的,那是錯誤的。幸運的是,你可以更多地取決於Python的錯誤信息 – 2013-03-20 17:44:48
L = [[1,2,3], [3,4,5], [1,2,3]]
newlist = []
for item in L:
if item not in newlist:
newlist.append(item)
這會工作,但可以稍微低效率的時候'L'很大,因爲每次有時間通過所有newlist'的'掃描每個'item'在'L' 。 – DSM 2013-03-20 17:39:45
可以轉換成元組,然後返回一個列表:如果你想直接讓一組從列表的列表錯誤消息給它了。
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]
你嘗試過什麼了嗎?你如何定義唯一性? '[1,2,3]'是否與'[3,2,1]'相同? – thegrinner 2013-03-20 17:31:17
大多數製作列表的解決方案只包含獨特的元素,對於列表清單應該同樣適用。 – drewmm 2013-03-20 17:33:00
@thegrinner是的,我已經試過已經和谷歌搜索等一個答案,我找不到任何 – Mermoz 2013-03-20 19:31:13