我有一个问题。我有两个k元素列表。我需要决定哪里有更小的价值。 恩。 K = 5
a=[100,1,2,105,3]
b=[99,7,8,0,0]
我需要选择a,因为在属于a的第一个k位置上有更多的最小值。
我尝试对每个位置的值进行排序和比较,但对于这种情况,它不起作用。我会感激任何投入。
答案 0 :(得分:1)
这是您开始使用所需内容的基本版本。您可以将此作为解决实际问题的起点。
这里的主要成分是使用heapq.nsmallest
和collections.Counter
。
nsmallest
函数从列表中查找n
个最小数字(在本例中为a
和b
列表的联合)。
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
获取最小值的计数,请从5
(n
)中减去先前获得的结果。
counts = {'b' : sum((ctr - Counter(a)).values())}
counts['a'] = 5 - counts['b']
print(counts)
{'a': 3, 'b': 2}
counts
告诉您每个列表中有多少个最小值。使用此选项可确定具有最大最小值数的列表。