Python/Pandas-仅用于循环记录最终迭代



强制警告-Python和Pandas的新功能。

我在执行只返回列表中最后一个值的for循环时遇到了一些困难。

我有一个.csv文件,其中包含我想通过CanvasAPI运行以发布用户分数的信息。.csv布局为:

Name  user_id  Score
0  Name_0     7454   90.0
1  Name_1     7075   96.0
2  Name_2     7377   76.0
3  Name_3     7259   49.0
4  Name_4     7294   48.0
5  Name_5     7491   76.5

我执行循环的代码是:

canvas = Canvas(API_URL, API_KEY)
course = canvas.get_course(9997)
assignment = course.get_assignment(78290)
userlist = [canvas.get_user(user) for user in df['user_id']]
length1 = len(userlist)
for i in range(length1):
(userlist[i])
scorelist = df['Score']
length2 = len(scorelist)
for x in range(length2):
(scorelist[x])
submission = assignment.get_submission(userlist[i])
submission.edit(submission={'posted_grade': scorelist[x]})

循环成功运行,但实际上只对.csv的最后一行进行了评分(对于Name_5(。我错过了什么?非常感谢您的帮助。

问题出现在最后一个for循环中。

for x in range(length2):
(scorelist[x])

每次循环迭代时,sconlist[x]将是x的最新值。因此,在执行结束时,scorlist[x]将是x最后的值。

每次循环迭代时,您都需要保存sconlist[x]的值。一种方法是将值附加到列表中:

scores = []
for x in range(length2):
scores.append(scorelist[x])

然后,您需要在最后更改提交内容,以发送所有分数,而不仅仅是最后一个分数。

for i in range(len(userlist)):
submission = assignment.get_submission(userlist[i])
submission.edit(submission={'posted_grade': scores[i]})

有更干净的方法可以做到这一点,但我试图尽可能少地修改您的代码。

最新更新