Python:'int'对象不是可下载的错误

时间:2014-11-10 12:21:43

标签: python list integer typeerror

基本上我试图用这个函数计算列表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],但这也不起作用。

我很感激任何答案。感谢

3 个答案:

答案 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))