簡體   English   中英

檢查Python中兩個長項目列表的重疊

[英]Checking for overlaps in two long lists of items in Python

我有兩個列表(list1和list2),其中包含1000萬個公司名稱。 每個列表都沒有重復,但有些公司出現在兩個列表中。 而且我想找到那些公司是什么。 我寫了下面的代碼:

list_matched = []
for i in range(len(list1)):
    for j in range(len(list2)):
        if list1[i] == list2[j]:
            list_matched.append(list1[i])

這段代碼的問題在於它永遠不會完成執行。 我的問題是我可以在合理的時間內完成這項任務。 1000萬名的大小似乎太大了,無法處理。

使用設定邏輯。 它專為此任務而設計。

a = set(list1)
b = set(list2)

companies_in_both = a & b

(這將生成一個set作為輸出。如果您需要它作為列表,只需將集合傳遞給list() 。)

我建議從一個列表中創建一個集合並檢查另一個列表,例如:

inlist1 = set(list1)
list_matched = [x for x in list2 if x in inlist1]

當然,您可以采用另一種方式“輪流”,具體取決於您要保留的列表順序(如果有) - 此代碼段保留了list2的順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM