簡體   English   中英

Python 中兩個列表的交集避免冗余匹配

[英]Intersection of two lists in Python avoiding redundant matching

我有兩個 python 列表match1match2

match1 = ['Submit', 'paper', 'error', 'code', 'notcomplete', 'next']

match2 = ['Submit', 'paper', 'error', 'code', 'blocked', 'paper', 'next']

現在,我使用__ contains __來查找match1match2之間的常用詞

common = filter(set(match1).__contains__,match2)

print(list(common))

這給了我以下 output

['Submit', 'paper', 'error', 'code', 'paper', 'next']

第二個列表中的單詞paper再次與第一個列表中的單詞paper匹配。

有沒有辦法避免這種情況並獲得以下 output?

['Submit', 'paper', 'error', 'code', 'next']

編輯:

列表的順序很重要。 這就是我使用 __ 包含 __ 而不是交集的原因。

我擔心的不是常用詞列表中是否存在重復條目。 我試圖避免match1中的相同條目再次與match2中的另一個條目匹配。 如果兩個列表都有兩個'paper' ,我會將它作為單獨的條目放在公共列表中。

您可以將列表轉換為集合,然后使用集合中的交集 function 查找常用詞。

match1 = ['Submit' , 'paper' , 'error' , 'code' , 'notcomplete' , 'next']
match2 = ['Submit' , 'paper' , 'error' , 'code' , 'blocked', 'paper' , 'next']
match1_set = set(match1)
match2_set = set(match2)
print(match1_set.intersection(match2_set))

如果您只是使用以下方法刪除重復項怎么辦:

print(list(dict.fromkeys(list(common)))

您可以使用列表理解,然后通過set()運行它

match1 = ['Submit' , 'paper' , 'error' , 'code' , 'notcomplete' , 'next']
match2 = ['Submit' , 'paper' , 'error' , 'code' , 'blocked', 'paper' , 'next']
print(set([x for x in match1 if x in match2]))

嗨 Krishnadas 歡迎來到 StackOverflow,

您可以將列表轉換為集合,這些集合是不允許重復的數據結構。 我看到你已經在match1上使用了它,但你也可以在match2上使用它們:

common = filter(set(match1).__contains__,set(match2))

我已經能夠找到答案。

match1 = ['Submit', 'paper', 'error', 'code', 'notcomplete', 'next']

match2 = ['Submit', 'paper', 'error', 'code', 'blocked', 'paper', 'next']

common = list(filter(match1.__contains__,match2))

common_final = [w for w in match1 if w in common]

print(common_final)

['Submit', 'paper', 'error', 'code', 'next']

感謝所有幫助過的人。

暫無
暫無

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

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