确定哪个列表在多个列表中具有最多的最小值

时间:2018-01-13 21:26:21

标签: python

我有一个问题。我有两个k元素列表。我需要决定哪里有更小的价值。 恩。 K = 5

a=[100,1,2,105,3]
b=[99,7,8,0,0]

我需要选择a,因为在属于a的第一个k位置上有更多的最小值。

我尝试对每个位置的值进行排序和比较,但对于这种情况,它不起作用。我会感激任何投入。

1 个答案:

答案 0 :(得分:1)

这是您开始使用所需内容的基本版本。您可以将此作为解决实际问题的起点。

这里的主要成分是使用heapq.nsmallestcollections.Counter

  • nsmallest函数从列表中查找n个最小数字(在本例中为ab列表的联合)。

  • Counter可以更轻松地找出那些n最小数字的来源。

首先,致电nsmallest以获取数字列表,并将其转换为Counter对象 -

import heapq
from collections import Counter

ctr = Counter(heapq.nsmallest(5, a + b))    
print(ctr)
Counter({0: 2, 1: 1, 2: 1, 3: 1})

接下来,您可以对Counter对象执行算术运算。因此,要查找b的最小值计数,请从Counter(a)中减去ctr。相应地,要从a获取最小值的计数,请从5n)中减去先前获得的结果。

counts = {'b' : sum((ctr - Counter(a)).values())}
counts['a'] = 5 - counts['b']

print(counts)
{'a': 3, 'b': 2}

counts告诉您每个列表中有多少个最小值。使用此选项可确定具有最大最小值数的列表。