如何返回两个独立集合中匹配元素的和

2024-04-26 21:49:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个带字符串的集合,我希望能够比较set1元素和set2元素,并输出匹配元素的总和。如果我能避免这个循环,那也会是首选。想法是这样的:

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

我要找的函数会在这里输出一个4—对于set2中包含的set1中的所有元素都返回True。R中的一个类似函数是

   sum(set1 %in% set2)

但是我在Python中找不到一个等价的。如果你们有人能帮忙,请告诉我。干杯


Tags: 函数字符串true元素heresomeareover
1条回答
网友
1楼 · 发布于 2024-04-26 21:49:10

首先,您没有set对象,您有list对象:

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

Python支持使用花括号显示的set文本:

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

Pythonset对象重载按位运算符以执行set操作。您需要集合交集中的元素数,因此请使用按位and运算符:

>>> 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

相关问题 更多 >