2017-10-11 69 views
1

我有兩個帶有字符串的集合,我希望能夠將set1元素與set2元素進行比較,並輸出匹配元素的總和。如果我能避免這個循環,那也是首選。我們的想法是這樣的:如何返回兩個單獨集合中匹配元素的總和

set1 = ['some','words','are','here'] 
    set2 = ['some','words','are','over','here','too'] 

功能我在這裏尋找將輸出4 - 包含在集2在SET1的所有元素返回true。在R中的同樣功能將是

sum(set1 %in% set2) 

但我無法在Python中找到等價物。讓我知道你們中的任何人是否可以提供幫助。乾杯

+0

'print(len(set(set1).intersection(set(set2))))'你在找這個嗎? – arsho

+0

你有列表,沒有設置。這些列表中的任何一個是否包含重複的字符串 –

+0

是的!非常感謝。我試圖搜索這麼難,找不到任何東西 – fattmagan

回答

2

首先,你沒有set對象,你有list對象:

>>> set1 = ['some','words','are','here'] 
>>> set2 = ['some','words','are','over','here','too'] 
>>> type(set1), type(set2) 
(<class 'list'>, <class 'list'>) 
>>> 

Python支持設置文字看起來像花括號:

>>> set1 = {'some','words','are','here'} 
>>> set2 = {'some','words','are','over','here','too'} 
>>> type(set1), type(set2) 
(<class 'set'>, <class 'set'>) 

的Python set對象會重載按位運算符來執行設置操作。你想在集合交集元素的數量,所以使用逐位和操作員:

>>> set1 & set2 
{'are', 'here', 'words', 'some'} 
>>> len(set1 & set2) 
4 

或者,你可以使用更多的面向對象的風格:

>>> set1.intersection(set2) 
{'are', 'here', 'words', 'some'} 
>>> len(set1.intersection(set2)) 
4 

我喜歡運營商,個人的看法:

>>> set1 & set2 # intersection 
{'are', 'here', 'words', 'some'} 
>>> set1 | set2 # union 
{'some', 'here', 'words', 'too', 'over', 'are'} 
>>> set1 - set2 # difference 
set() 
>>> set2 - set1 # difference 
{'too', 'over'} 
>>> set2^set1 # symmetric difference 
{'over', 'too'} 

如果你有list對象,只是轉換爲set

>>> l1 = ['some','words','are','here'] 
>>> l2 = ['some','words','are','over','here','too'] 
>>> set(l1).intersection(l2) 
{'some', 'are', 'words', 'here'} 
>>> len(set(l1).intersection(l2)) 
4 
相關問題