2011-08-04 47 views
1

我有2個非常大的數組。如何區分一個非常大的數組?

這段代碼運行起來會非常慢嗎?

 

results1 = [1,2,3..] 
results2 = [1,2,3,4 ... ] 


for result1 in results1: 
    if result1 not in results2: 
     print result1 

+0

任何示例如何非常大? – tomasz

回答

7

使用set

hashed = set(results2) 

.... 

    if result1 not in hashed: 

注意,這需要大量的內存,如果你的陣列確實非常大。

或者,對兩個數組進行排序並使用兩個索引。如果兩個元素都相同,則增加兩個索引。如果它們不相等,則增加包含較小元素的數組的索引。

1

嘗試這一個

L1 = [4,2,4,5,2,1,3,3,34,54,3445,4]

L2 = [5,7,4,5,8,5,2,4,56]

diff_l =列表(集(L1)-set(L2))

更多操作Reference

但可能無法幫助全或龐大的數據

0

我真的不明白,你是否希望平原差(a元素,但不是在b)或對稱執行良好差異(兩者都不存在的元素),但幸運的是,在將列表轉換爲set之後,兩者都可以使用regular set operations

但首先警告 - 轉換列表進行設置,從列表中刪除重複元素,因爲集合不能包含重複項。

因此,讓我們的聲明:數據

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> b = [12, 11, 10, 9, 8, 7, 6] 

爲了得到純的差異,即存在於a元素,但不是在b

>>> set(a) - set(b) 
set([0, 1, 2, 3, 4, 5]) 

爲了得到對稱差(即元素僅存在於一個陣列中,但不在兩者中):

>>> set(a)^set(b) 
set([0, 1, 2, 3, 4, 5, 10, 11, 12]) 

作爲一個額外的獎勵,存在於以下兩個元素:

>>> set(a) & set(b) 
set([8, 9, 6, 7]) 
相關問題