2024-09-30 22:28:48 发布
网友
我有两个字符串,我希望它们的交点包括重复项:
str_a = "aabbcc" str_b = "aabd" list(set(str_a) & set(str_b)) >> "ab"
我想退货:
>> "aab"
有什么想法吗
多集在python 2.7或更高版本中作为(可变)Counter对象实现。您可以对集合执行许多相同的操作,例如并集、交集、差集(尽管计数可能为负数),等等:
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()的可编辑格式
''.join
list()
intersection.elements()
对每个单词使用^{},并将其作为集合使用:
>>> from collections import Counter >>> str_a, str_b = 'aabbcc', 'aabd' >>> Counter(str_a) & Counter(str_b) Counter({'a': 2, 'b': 1}) >>> ''.join((Counter(str_a) & Counter(str_b)).elements()) 'aab'
Counter是一个dict子类,但它对初始化序列的所有元素进行计数。因此,"aabbcc"变成了Counter({'a': 2, 'b': 2, 'c': 2})
dict
"aabbcc"
Counter({'a': 2, 'b': 2, 'c': 2})
计数器的行为类似于多集,因为当您在上述交叉点中使用2时,其计数将设置为在任一计数器中找到的最小值,忽略任何计数降至0的值。如果要计算它们的并集,则将使用最大计数
多集在python 2.7或更高版本中作为(可变)
Counter
对象实现。您可以对集合执行许多相同的操作,例如并集、交集、差集(尽管计数可能为负数),等等:解决方案:
更多详情:
如果需要字符串,可以使用
''.join
;如果需要列表,可以使用list()
,尽管我只是将其保持为intersection.elements()
的可编辑格式对每个单词使用^{} ,并将其作为集合使用:
Counter
是一个dict
子类,但它对初始化序列的所有元素进行计数。因此,"aabbcc"
变成了Counter({'a': 2, 'b': 2, 'c': 2})
计数器的行为类似于多集,因为当您在上述交叉点中使用2时,其计数将设置为在任一计数器中找到的最小值,忽略任何计数降至0的值。如果要计算它们的并集,则将使用最大计数
相关问题 更多 >
编程相关推荐