2015-06-25 72 views
0

我有一個列表類似如下得到一組二維表的蟒蛇

t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]] 

我需要一套擺脫這種所以輸出會像

t=[[1, 7], [3, 7], [5, 8]] 

我試圖用t=set(t)但它沒有工作

+1

將項目轉換爲元組並將它們傳遞給'OrderedDict.fromkeys',最後再次將元組鍵轉換爲列表。 (如果爲了事項) –

回答

2

如果你不關心的順序,你可以使用map()富先轉換內部liststuples nction,然後將它們轉換爲set然後回到list

示例 -

>>> t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]] 
>>> t = list(set(map(tuple,t))) 
>>> t 
[(3, 7), (5, 8), (1, 7)] 
+0

正是我一直在尋找 – zeref

+0

高興它爲你工作,會建議你接受的答案,最好的一個,你認爲,將有助於誰也有類似的問題和社會作爲一個整體的人。 –

3

的問題是,列表是可變的,因此誰也不能把一套了他們,因爲他們可能會改變。因此你想要使用不可變的元組。因此,你可以使用:

list(set([tuple(ti) for ti in t])) 
0

而且如果你不關心順序:

def func(items): 
    seen = set() 
    for item in items: 
     item = tuple(item) 
     if item not in seen: 
      yield item 
      seen.add(item) 

,或者你只是子類列表,並覆蓋追加所以沒有重複可以在第一時間加入:

class T(list): 
    def append(self, item): 
     if item not in self: 
      list.append(self, item) 

這將是像這樣使用:

>>> t = T([[1, 7], [3, 7], [5, 8]]) 
>>> t 
[[1, 7], [3, 7], [5, 8]] 
>>> t.append([1, 7]) 
>>> t 
[[1, 7], [3, 7], [5, 8]] 
0

集合只能包含不可變元素。 list是可變類型,則需要將項目轉換爲不可變的類型,例如tuple

set(map(tuple, t))