查找具有键和值的乘积最大值的键的最大值
我得到了输出,我正在寻找最佳解决方案
a = [3,4,5,5,6,6,6,7,7]
c = set(a)
counts = {}
for i in a:
if i in counts:
counts[i] += 1
else:
counts[i] =1
#counts
t = [k*v for k,v in counts.items()]
max_index = t.index(max(t))
list(c)[max_index]
6
没有错误,如何优化代码。需要列表理解
for [k * v for counts.items()中的k,v。我可以在其中添加地图功能吗?
答案 0 :(得分:1)
您可以use collection.Counter
或collections.defaultdict
with int
为您进行计数(比您的-valid-解决方案都快)。
要通过适当的key
函数获得最大值use sorted()
- see sorting overview:
from collections import Counter
a = [3,4,5,5,6,6,6,7,7]
c = Counter(a)
m = sorted(c.items(),key= lambda x: x[0]*x[1], reverse = True)
print(m)
打印
[(6, 3), (7, 2), (5, 2), (4, 1), (3, 1)]
所以m[0][0]
是您6
的结果。
max(...)
也可以使用相同的键功能。
Defaultdict版本(计数器之后有更多行):
from collections import defaultdict
a = [3,4,5,5,6,6,6,7,7]
c = defaultdict(int)
for num in a:
c[num] += 1
答案 1 :(得分:1)
更改字典,使值已与键相乘。然后,您可以使用Getting key with maximum value in dictionary?中的一种解决方案来找到具有最大值的键。
for i in a:
if i in counts:
counts[i] += i
else:
counts[i] = i
答案 2 :(得分:1)
这是您如何使用地图获取“ t”列表的方法
def function(item):
return item[0]*item[1]
t = list(map(function, counts.items()))