Python - 查找列表中列表的平均分数

时间:2015-03-11 18:36:50

标签: python

我正在尝试使用lambda找到列表中列表的平均分数。

Scores=[['James','Q',3,4,1,5],['Kat','S',3,4,1,2],['John','G',3,5,6,4]['Erikson','G',3,7,6,8],['Filip','NJ',3,8,9,9]]
sortedScores=sorted(Scores,key=lambda score:avg(score[3:],reverse=False))

for i in Scores:
    print(i[0:1],avg(i[3:]))

avg不是命令,那么在此代码中计算平均值的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

你忘记了一个逗号,这就是全部:

Scores=[
    ['James','Q',3,4,1,5],
    ['Ryan','G',3,4,1,2],
    ['Klodiano','G',3,5,6,4]['Erikson','G',3,7,6,8],
    #                      ^^
    ['Filip','NJ',3,8,9,9]
]

如果没有逗号,列表['Klodiano','G',3,5,6,4]将被编入索引,但是您传入了元组('Erikson','G',3,7,6,8)而不是整数。

请注意,您的sorted()列表也有错误:

sortedScores=sorted(
    Scores,
    key=lambda score:avg(score[3:],reverse=False))
    #                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您正在将reverse=False传递给avg()可调用者,而不是sorted()。你可能想要:

sortedScores=sorted(
    Scores,
    key=lambda score:avg(score[3:]),
    reverse=False)

代替。

如果你想分别打印每个学生的名字,你不需要切片;你改为使用索引:

for i in Scores:
    print(i[0], avg(i[3:]))

最后,您正在实施的GCSE programming problem要求最后3个分数,而不是除了前1个分数以外的所有分数。您需要使用-3来分割最后3个分数来计算平均:

avg(score[-3:])