我有一個比較複雜的交叉引用任務,我需要一個long
列表(〜60萬項)和short
列表(之間進行萬〜30萬項)。我試圖找到兩個列表之間的相似條目,並且每個唯一條目由三個不同的整數標識(稱爲它們int1
,int2
和int3
)。根據一個列表中的三個整數標識符,我想看看這三個整數是否在另一個列表中,並返回它們是哪一個。
嘗試:
首先我拉上在long
列表中的每個三整數元組成稱爲a
陣列。同樣,我拉上在short
列表中的每個三INT元組到名爲b
數組:
a = [(int1,int2,int3),...] # 600,000 entries
b = [(int1,int2,int3),...] # 300,000 entries
然後,我通過a
每個條目重複,看它是否是b
。如果是的,我所附相應元組到外循環的陣列稱爲c
:
c= []
for i in range(0,len(a),1):
if a[i] in b:
c.append(a[i])
迭代是(不奇怪)非常緩慢。我猜Python每次迭代(〜300,000次!)都必須檢查b
的a[i]
,並且它的迭代次數是600,000次。它已經花了一個多小時了,但還沒有完成,所以我知道我應該優化一些東西。
我的問題是:什麼是執行此交叉引用最Pythonic或最快的方法?
你會可能會更好使用''過濾器代替地圖的'()()'和擺脫'compress()'。 a中的x仍然很慢;考慮首先將'a'轉換爲集合。 – mhawke
絕對正確。 –