我有一个问题,我找不到一个好的答案:我想合并两个列表,但保持每个对象EX出现的次数相同:
list1 = [2,3,7]
list2 = [2,2,5]
Run Code Online (Sandbox Code Playgroud)
合并两个列表后,结果应如下所示:
res = [2,2,3,5,7] #it does not need to be sorted
Run Code Online (Sandbox Code Playgroud)
观察从一开始就有三个"2"但合并后应该只有两个"2"
我找到的最接近的是这篇文章:组合两个列表并删除重复项,而不删除原始列表中的重复项
但这不符合我想要的方式.
另一个例子:
l1 = [2]
l2 = [3]
l3 = [2,2]
l4 = [5]
l5 = [2,3]
#after adding all the lists above
result = [2,2,3,5]
Run Code Online (Sandbox Code Playgroud)
据我了解您的问题,您希望每个数字都出现在结果中,并显示在任何输入列表中出现的最大频率.您可以使用a collections.Counter来获取每个列表的频率,并使用|它们上的运算符来合并它们:
>>> c = collections.Counter([2, 2, 5])
>>> d = collections.Counter([2, 3, 7])
>>> list((c | d).elements())
[2, 2, 3, 5, 7]
Run Code Online (Sandbox Code Playgroud)
这是一个加入任意数量列表的函数:
def merge_max_frequency(*iterables):
return reduce(operator.or_, map(collections.Counter, iterables)).elements()
Run Code Online (Sandbox Code Playgroud)
此函数返回一个可迭代而不是一个列表 - 只需应用于list()它就可以获得一个列表.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |