【发布时间】:2013-10-15 07:49:23
【问题描述】:
我有一个问题我找不到合适的答案: 我想合并两个列表,但保持每个对象的出现次数相同 例如:
list1 = [2,3,7]
list2 = [2,2,5]
合并两个列表后,结果应如下所示:
res = [2,2,3,5,7] #it does not need to be sorted
发现一开始是三个“2”,合并后应该只有两个“2”
我找到的最接近的是这篇文章:Combining two lists and removing duplicates, without removing duplicates in original list
但这并不像我想要的那样工作。
另一个例子:
l1 = [2]
l2 = [3]
l3 = [2,2]
l4 = [5]
l5 = [2,3]
#after adding all the lists above
result = [2,2,3,5]
【问题讨论】:
-
合并后为什么只有两个?
-
为两个列表创建一个计数器,并将每个条目的 max(counter1, counter2) 项输出到结果列表中。
-
好吧,merging 可能是一个错误的词,但它是这样的:如果我们“合并”l1 和 l2,我们会得到 [2,3]。如果我们然后将新列表与 l3 “合并”,我们会得到 [2,2,3](只有两个 2)等等......
-
当我们将
[2,3]与[2,2,2,2,3]合并时会发生什么? -
您的原始列表是否已排序?你关心算法效率吗? dornherge 的 Counter 解决方案应该可以工作,但如果对原始列表进行排序,则不会是最佳解决方案。除非你有数百万个元素,否则应该没关系。