Python 列表与非唯一项的交集

标签 python intersection multiset

我有两个字符串,我希望它们有交集包括重复项:

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/

相关文章:

javascript - 从 Tomcat 8.5 启动 Python 脚本

python - Pyspark 数据框如何删除所有列中的空行?

algorithm - 文件的交集

java - MultiSet:添加、删除和等于的问题

linux - Debian 中的硬件加速 NVidia 和 Intel 显卡

python - 即使元素存在, Selenium 也无法找到它们

python - 试图理解 Python 中的抽象工厂模式

algorithm - 如何有效地测试任意多边形是否与正方形相交?

.net - HashSet.Intersect() 的顺序对性能有影响吗?

scala - Scala中缺少多集吗?