我有两个字符串,我希望它们之间有交叉点,包括重复项:

str_a = "aabbcc"
str_b = "aabd"

list(set(str_a) & set(str_b))
>> "ab"

我想退货:
>> "aab"

有什么想法吗?

最佳答案

多集在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(),不过我会将其保持为可ITerable格式,如intersection.elements()

10-04 11:46