我有2個非常大的數組。如何區分一個非常大的數組?
這段代碼運行起來會非常慢嗎?
results1 = [1,2,3..] results2 = [1,2,3,4 ... ] for result1 in results1: if result1 not in results2: print result1
我有2個非常大的數組。如何區分一個非常大的數組?
這段代碼運行起來會非常慢嗎?
results1 = [1,2,3..] results2 = [1,2,3,4 ... ] for result1 in results1: if result1 not in results2: print result1
使用set
:
hashed = set(results2)
....
if result1 not in hashed:
注意,這需要大量的內存,如果你的陣列確實非常大。
或者,對兩個數組進行排序並使用兩個索引。如果兩個元素都相同,則增加兩個索引。如果它們不相等,則增加包含較小元素的數組的索引。
嘗試這一個
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
但可能無法幫助全或龐大的數據
我真的不明白,你是否希望平原差(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])
任何示例如何非常大? – tomasz