2016-10-10 52 views
1

這似乎是一個相當直接的問題,但我似乎無法找到一種有效的方法來完成它。我有這樣一個列表的列表:通過條目獲取列表中的唯一條目

list = [['abc','def','123'],['abc','xyz','123'],['ghi','jqk','456']] 

我想在每個孩子列表中的第三個項目(「ID」),以獲得獨特的條目列表,即最終的結果應該是

unique_entries = [['abc','def','123'],['ghi','jqk','456']] 

什麼是最有效的方法來做到這一點?我知道我可以使用set來獲取唯一的id,然後再遍歷整個列表。但是,我的清單中有超過200萬條條目,而且這個時間太長了。欣賞你可以提供的任何指針!謝謝。

+0

ID是排序的,還是至少等價的是彼此相鄰的? – kennytm

回答

4

這個怎麼樣:創建一個set跟蹤已經看到的id,並且只添加其中id沒有看到的子列表。

l = [['abc','def','123'],['abc','xyz','123'],['ghi','jqk','456']] 

seen = set() 
new_list = [] 

for sl in l: 
    if sl[2] not in seen: 
     new_list.append(sl) 
     seen.add(sl[2]) 

print new_list 

結果:

[['abc', 'def', '123'], ['ghi', 'jqk', '456']] 
+0

打敗我吧! +1 –

0

一種方法是創建一個內部循環。在第一個循環中,從1開始遍歷外部列表,以前您需要創建一個ArrayList,它將添加第一個元素,在從索引0開始的內部循環中,您只會檢查第三個元素是否位於在arraylist current持有元素中的第三個元素,如果沒有找到,那麼在另一個範圍超出outll的數組列表中,您將添加此元素,否則將使用「continue」關鍵字。最後,你將打印出最後創建的數組列表。

+3

我沒有跟着你。 –