我有两个字符串,我希望它们有交集包括重复项:
str_a = "aabbcc"
str_b = "aabd"
list(set(str_a) & set(str_b))
>> "ab"
我想让它返回:
>> "aab"
有什么想法吗?
最佳答案
Multisets 在 python 2.7 或更高版本中作为(可变的)Counter
对象实现。您可以执行许多与集合相同的操作,例如并集、交集、差集(尽管计数可能变为负数)等:
from collections import Counter as mset
解决方法:
(mset("aabbcc") & mset("aabd")).elements()
更多详情:
>>> intersection = mset("aabbcc") & mset("aabd")
Counter({'a': 2, 'b': 1})
>>> list(intersection.elements())
['a', 'a', 'b']
>>> ''.join(intersection.elements())
'aab'
如果你想要一个字符串,你可以使用 ''.join
,如果你想要一个列表,你可以使用 list()
,尽管我只是将它保持为可迭代的格式intersection.elements()
.
关于Python 列表与非唯一项的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253361/