2016-01-09 134 views
-3

我在想如果可以從兩個列表中縮短但不使用set創建一個獨特元素列表?兩個列表中的獨特元素

l1 = [1,1,2,2,3] 
l2 = [2,1,3,3,4] 
unique = [] 
for elem in l1+l2: 
    if elem not in unique: 
     unique.append(elem) 
print unique 

[1,2,3,4] 

感謝您的想法

+1

唔只使用一個'set'。我猜'dict.fromkeys(l1 + l2).keys()',但這是非常作弊。 –

+0

@AdamSmith這是非常有趣的解決方案 – tinySandy

+1

@pianista:沒有downvote,但我認爲原因是:*爲什麼不使用'set'?這就是爲什麼Python有'set',這就是它的作用。* –

回答

2

首先,你應該使用在Python set找到獨特的價值,因爲它有效地爲您提供了獨特的元素。

如果你想使用list那麼你提供的代碼是正確的!如果你在你的代碼中使用numpy(這可能是大量數據的一個不錯的選擇),請numpy.unique

>>> import numpy as np 
>>> wordsList = [u'nowplaying', u'PBS', u'PBS', u'nowplaying', u'job', u'debate', u'thenandnow'] 
>>> np.unique(wordsList) 
array([u'PBS', u'debate', u'job', u'nowplaying', u'thenandnow'], 
     dtype='<U10') 

還應考慮該基準測試結果發現unique valuesLink

提供代碼,在該鏈接,但添加在這裏,供大家參考:

​​

基準測試結果

* f2 13.24 
* f4 11.73 
* f5 0.37 
f1 0.18 
f3 0.17 
f6 0.19 
+0

f2,與op的解決方案基本相同,在時間複雜度方面是O(n^2)。結果表明它是最慢的算法之一。 –

-3

具體使用您的代碼

l1 = [1,1,2,2,3] 
l2 = [2,1,3,3,4] 
unique=set(l1+l2) 

如果你想讓它作爲一個列表不是一組

unique=list(set(l1+l2)) 
+0

這不是一個答案,因爲我特別要求不要使用set – tinySandy