Python 确定哪个列表在多个列表中具有最多的最小值
我有以下问题。我有两个k元素的列表。我需要决定哪里是最小值。 例k=5 我需要选择a,因为在属于a的第一个k位置上有更多的最小值Python 确定哪个列表在多个列表中具有最多的最小值,python,Python,我有以下问题。我有两个k元素的列表。我需要决定哪里是最小值。 例k=5 我需要选择a,因为在属于a的第一个k位置上有更多的最小值 我试图对每个位置上的值进行排序和比较,但在这种情况下,它不起作用。我将非常感谢您的任何意见。这里有一个非常基本的版本,可以帮助您开始学习。您可以将此作为解决实际问题的起点 这里的主要成分是使用heapq.nsmallest和collections.Counter nsmallest函数从列表中查找n最小数字(在本例中,是a和b列表的并集) 使用计数器可以更容易地找出
我试图对每个位置上的值进行排序和比较,但在这种情况下,它不起作用。我将非常感谢您的任何意见。这里有一个非常基本的版本,可以帮助您开始学习。您可以将此作为解决实际问题的起点 这里的主要成分是使用
heapq.nsmallest
和collections.Counter
函数从列表中查找nsmallest
最小数字(在本例中,是n
和a
列表的并集)b
- 使用
可以更容易地找出那些计数器
最小数字的来源n
nsmallest
获取数字列表,并将其转换为计数器
对象-
import heapq
from collections import Counter
ctr = Counter(heapq.nsmallest(5, a + b))
print(ctr)
Counter({0: 2, 1: 1, 2: 1, 3: 1})
接下来,您可以对计数器
对象执行算术运算。因此,要从b
中找到最小值的计数,请从ctr
中减去计数器(a)
。相应地,要从a
中获得最小值的计数,请减去先前从5
中获得的结果(n
)
计数
告诉您每个列表中有多少个最小值。用它来确定最小值的最大数量。你在说什么?你所说的“在属于a的第一个k-位置上有更多的最小值”是什么意思?将元素成对匹配,b有3个较小的元素,a有两个,所以不是这样。两个列表中的最小元素都是0,所有0都在b中,所以也不是这样。你想问什么?3最小的元素属于。。。两个列表中最小的元素只有0和k=5。对于两个列表中的5个最小值,找出哪个列表中的元素更多。应如何处理关系?如果99是另一个3,结果会是什么?如果99和7都是3呢?
import heapq
from collections import Counter
ctr = Counter(heapq.nsmallest(5, a + b))
print(ctr)
Counter({0: 2, 1: 1, 2: 1, 3: 1})
counts = {'b' : sum((ctr - Counter(a)).values())}
counts['a'] = 5 - counts['b']
print(counts)
{'a': 3, 'b': 2}