python - Python中的列表联合算法

标签 python algorithm

我现在正在尝试使用列表联合算法,具有以下规范:如果 L1 中的元素在 L1 中出现的次数多于它在 L2 中出现的次数,则联合应返回最大出现次数,即它的数量出现在 L1 中,如果元素在 L2 中出现的次数多于在 L1 中出现的次数,则 L1 和 L2 的角色会互换。如果 L1 和 L2 不相交,则并集仅返回常规集并集。到目前为止,我的思考过程是:

  1. 遍历 L1。
  2. 检查 L1 中的任何元素是否也在 L2 中。
  3. 如果 L1 中的元素也在 L2 中,检查哪个列表具有更大的元素count
  4. 如果 L1 和 L2 不相交,则返回正则集并集。
  5. 将 L2 和 L1 颠倒,重复第 3 步。
  6. 归还工会。

我正在考虑使用 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/

相关文章:

python - 惯用的 Python : 'times' loop

python - 从 "main program"获取所有预定义变量的子程序

python - 如何保存和加载 xgboost 模型?

python - 两个同步生成器函数,Python

python - 在 Python 中实现快速排序

algorithm - 如果使用插入排序对每个桶进行排序,桶排序O(n+k)的时间复杂度如何?

Python——字符串错误

algorithm - 如何求解递归 T(n) = T(n/2) + T(n/4), T(1) = 0, T(2) = 1 即 T(n) = Θ(n lg φ ),其中 φ 是黄金比例?

algorithm - 如果循环变量除/乘以恒定量,为什么我们将时间复杂度视为 O(Logn)?

java - 我怎样才能让这些 java 行算法工作?