我正在尝试编写一个名为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]
我不知道如何使用嵌套循环来完成此操作。任何帮助或指导表示赞赏。
答案 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))