基本上我试图用这个函数计算列表a中n个最高值的总和。
def sumHighest(a, n):
return sum(sorted(a, key = lambda numbers : (-numbers, numbers[0:n])))
我收到此错误:TypeError:'int'对象不可订阅。
我想访问时遇到问题 - 数字[0:n] - 但这是我唯一能够访问列表中n个最高值的解决方案。我也尝试了[0:n]而不是数字[0:n],但这也不起作用。
我很感激任何答案。感谢
答案 0 :(得分:3)
您正在寻找:
def sumHighest(a, n):
return sum(sorted(a)[-n:])
我不明白为什么要向key
提供sorted
参数。也许你想按降序排序?如果您使用key
参数执行此操作,那将看起来像这样:
def sumHighest(a, n):
return sum(sorted(a, key = lambda x: -x)[:n])
sorted
还附带一个reverse
参数,当您需要简单地反转排序顺序时,您应该更喜欢这个参数:
def sumHighest(a, n):
return sum(sorted(a, reverse = True)[:n])
感谢多位评论者向我指出:)
答案 1 :(得分:1)
你似乎对这里的一些事感到困惑。 numbers
是lambda表达式的参数,正如错误消息所示,它是一个int:一个key
函数依次传递给每个元素以生成一个用于排序的键。 / p>
正如其他人所指出的那样,这与你想要做的事情无关:你只想在列表排序之后取上前n,这不是用关键表达式完成的。
答案 2 :(得分:1)
如果n
与列表大小相比较小,那么您应该使用heapq.nlargest
。
import heapq
def sumHighest(a, n):
return sum(heapq.nlargest(n, a))