我有两个带字符串的集合,我希望能够将set1元素与set2元素进行比较,并输出匹配元素的总和。如果我可以避免使用此循环,那么这也是首选。这个想法是这样的:
set1 = ['some','words','are','here']
set2 = ['some','words','are','over','here','too']
我正在寻找的函数在这里输出4 - 对于set2中包含的set1中的所有元素返回True。 R中的同样功能是
sum(set1 %in% set2)
但是我找不到Python中的等价物。如果你们中的任何人能提供帮助,请告诉我。干杯
答案 0 :(得分:2)
首先,你没有set
个对象,你有list
个对象:
>>> set1 = ['some','words','are','here']
>>> set2 = ['some','words','are','over','here','too']
>>> type(set1), type(set2)
(<class 'list'>, <class 'list'>)
>>>
Python支持set-literals,看起来像花括号:
>>> set1 = {'some','words','are','here'}
>>> set2 = {'some','words','are','over','here','too'}
>>> type(set1), type(set2)
(<class 'set'>, <class 'set'>)
Python set
对象重载按位运算符以执行set-operations。您需要集合交集中的元素数量,因此请使用按位和运算符:
>>> 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