Python嵌套列表函数,用于返回学生考试的分数。

时间:2018-02-03 02:24:35

标签: python python-3.x list function average

我正在尝试编写一个名为studentGrades(gradeList)的函数,该函数采用嵌套列表并返回一个列表,其中包含每个学生的平均分数。 一个例子是:

 grades= [['Student','Quiz 1','Quiz 2','Quiz 3','Final'],
 ['John', 100, 90, 80, 90],
 ['McVay', 88, 99, 11, 15],
 ['Rita', 45, 56, 67, 89],
 ['Ketan', 59, 61, 67, 32],
 ['Saranya', 73, 79, 83, 45],
 ['Min', 89, 97, 101, 100]]
 studentGrades(grades)

 # Sample output below
 >>> [90, 53, 64, 54, 70, 96]

我不知道如何使用嵌套循环来完成此操作。任何帮助或指导表示赞赏。

5 个答案:

答案 0 :(得分:1)

如果您需要一个班轮

[int(sum(i[1:])/len(i[1:])) for i in grades[1:]]

输出:

[90, 53, 64, 54, 70, 96]

答案 1 :(得分:0)

您可以这样做:

def studentGrades(a):
    # return [sum(k[1:])/(len(k)-1) for k in a[1:]]
    # Or
    l = len(a[0]) - 1 # how many quizzes, thanks to @Mad Physicist
    return [sum(k[1:])/l for k in a[1:]]

grades= [['Student','Quiz 1','Quiz 2','Quiz 3','Final'],
 ['John', 100, 90, 80, 90],
 ['McVay', 88, 99, 11, 15],
 ['Rita', 45, 56, 67, 89],
 ['Ketan', 59, 61, 67, 32],
 ['Saranya', 73, 79, 83, 45],
 ['Min', 89, 97, 101, 100]]

final = studentGrades(grades)
print(final)

输出:

[90, 53, 64, 54, 70, 96]

答案 2 :(得分:0)

正如我在评论中建议的那样,你也可以使用字典。字典基本上是针对这样的情况而制作的,如果你想进一步使用你的数据,它们可能证明是有益的。 你首先必须转换你当前的结构,我认为这是固定的,因为你有一个"标题"在成绩,然后列表[名称,点..]。你可以这样做:

grades= [['Student','Quiz 1','Quiz 2','Quiz 3','Final'],
 ['John', 100, 90, 80, 90],
 ['McVay', 88, 99, 11, 15],
 ['Rita', 45, 56, 67, 89],
 ['Ketan', 59, 61, 67, 32],
 ['Saranya', 73, 79, 83, 45],
 ['Min', 89, 97, 101, 100]]
gradedict = {}
for rows in grades[1:]:
    gradedict[rows[0]] = rows[1:]

初始化字典。然后是以下功能:

def studentGrades(gradedict):
    avgdict = {}
    for key,lst in gradedict.items():
        avgdict[key] = sum(lst)/len(lst) 
    return avgdict

返回具有相应平均值的另一个字典。您可以遍历其中任何一个的名称,即键,以打印它。例如:

gradedict = studentGrades(gradedict)
for x in gradedict:
    print("student ",x, " achieved an average of: ",gradedict[x])

这只是为了向您展示如何访问元素。你当然也可以像我在函数中那样遍历键,项目。 希望这会有所帮助。

答案 3 :(得分:0)

为什么不直接使用熊猫?

df = pd.DataFrame(grades).set_index(0).iloc[1:].mean(axis=1).astype(int)

<强>输出:

John       90
McVay      53
Rita       64
Ketan      54
Saranya    70
Min        96

list(df.values)

<强>输出:

[90, 53, 64, 54, 70, 96]

答案 4 :(得分:0)

grades= [['Student','Quiz 1','Quiz 2','Quiz 3','Final'],
 ['John', 100, 90, 80, 90],
 ['McVay', 88, 99, 11, 15],
 ['Rita', 45, 56, 67, 89],
 ['Ketan', 59, 61, 67, 32],
 ['Saranya', 73, 79, 83, 45],
 ['Min', 89, 97, 101, 100]]

def average(grades):
    for m in grades[1:]:
        t = m[1:]
        l = len(t)
        s = sum(t)
        yield s//l

list(average(grades))
相关问题