我现在正在尝试使用列表联合算法,具有以下规范:如果 L1 中的元素在 L1 中出现的次数多于它在 L2 中出现的次数,则联合应返回最大出现次数,即它的数量出现在 L1 中,如果元素在 L2 中出现的次数多于在 L1 中出现的次数,则 L1 和 L2 的角色会互换。如果 L1 和 L2 不相交,则并集仅返回常规集并集。到目前为止,我的思考过程是:
- 遍历 L1。
- 检查 L1 中的任何元素是否也在 L2 中。
- 如果 L1 中的元素也在 L2 中,检查哪个列表具有更大的元素
count
。 - 如果 L1 和 L2 不相交,则返回正则集并集。
- 将 L2 和 L1 颠倒,重复第 3 步。
- 归还工会。
我正在考虑使用 max
函数来告诉 Python 返回列表,其中联合中每个元素的重数是该元素在 L1 和 L2 中出现的最大次数.想法?
最佳答案
对于提供多重集的 collections
标准模块来说,这是一个完美的工作:
from collections import Counter
result_list = list((Counter(list1)|Counter(list2)).elements())
Counter
对象在这里表示一个多重集(通常包含超过 1 个其元素副本的集合),并集运算符 |
保留每个元素的最大计数,并且elements()
返回一个迭代器,其中每个元素返回与其计数对应的次数。
如果您真的不需要列表但可以在代码中使用多重集,那么 Counter(list1) | Counter(list2)
是联合 multiset你需要的。
关于python - Python中的列表联合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888164/