2015-10-08 279 views
1

我有列表的列表,我想刪除列表中的重複項目。刪除列表中的重複列表

my_list= 
[[[2, 5, 71.1], [1, 3, 70.0]], 
[[2, 5, 71.1], [1, 3, 70.0]], 
[[2, 5, 71.1], [1, 3, 70.0]], 
[[5, 10, 80.0], [6, 9, 80.0], [5, 8, 80.0]], 
[[5, 10, 80.0], [6, 9, 80.0], [5, 8, 80.0]], 
[[5, 10, 80.0], [6, 9, 80.0], [5, 8, 80.0]], 
[[10, 12, 80.0]], 
[[14, 16, 80.0], [13, 20, 81.0]], 
[[14, 16, 80.0], [13, 20, 81.0]], 
[[22, 24, 80.0]], 
[[26, 28, 80.0], [25, 40, 80.0]], 
[[26, 28, 80.0], [25, 40, 80.0]], 
[[40, 42, 80.0], [40, 41, 80.0]], 
[[40, 42, 80.0], [40, 41, 80.0]], 
[[44, 45, 80.0]]] 

output_wanted= 
[[[2, 5, 71.1], [1, 3, 70.0]], 
[[5, 10, 80.0], [6, 9, 80.0], [5, 8, 80.0]], 
[[10, 12, 80.0]], 
[[14, 16, 80.0], [13, 20, 81.0]], 
[[22, 24, 80.0]], 
[[26, 28, 80.0], [25, 40, 80.0]], 
[[40, 42, 80.0], [40, 41, 80.0]], 
[[44, 45, 80.0]]] 

我需要類似set函數那樣快速完成工作。但在這種情況下我不能使用set函數。有沒有辦法做到這一點?

+1

你確實有列表的列表清單,這是不明確的,你怎麼想刪除在結構方面的重複(如如果'[5,8,80.0]'出現在兩個不同的子列表中,哪一個會保留它?) – interjay

回答

1

這是因爲list不可散列。 在申請set()之前,您需要將的元素轉換爲tuples(可散列)。

>>> my_list = [[1, 2], [1, 2], [3, 4]] 
>>> result = [list(el) for el in set(tuple(el) for el in my_list)] 
[[1, 2], [3, 4]] 

更新有新的數據:

>>> [list(list(y) for y in el) 
     for el in set([tuple(tuple(x) for x in el) for el in my_list])] 

[[[26, 28, 80.0], [25, 40, 80.0]], 
[[10, 12, 80.0]], 
[[40, 42, 80.0], [40, 41, 80.0]], 
[[44, 45, 80.0]], 
[[5, 10, 80.0], [6, 9, 80.0], [5, 8, 80.0]], 
[[22, 24, 80.0]], 
[[14, 16, 80.0], [13, 20, 81.0]], 
[[2, 5, 71.1], [1, 3, 70.0]]] 
+0

感謝您的很好回答。當我粘貼問題文本時,如何更改此代碼以處理真實數據? – user3015703