[英]Intersection of two lists in Python avoiding redundant matching
我有兩個 python 列表match1
和match2
match1
= ['Submit', 'paper', 'error', 'code', 'notcomplete', 'next']
match2
= ['Submit', 'paper', 'error', 'code', 'blocked', 'paper', 'next']
現在,我使用__ contains __
來查找match1
和match2
之間的常用詞
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.