我编写了一个程序,向用户询问5个随机数学问题,并将其名称和分数保存到csv文件中。
我只希望我的列表为每个学生存储最新的3个分数。我怎么能在Python 3的列表中做到这一点?
我目前的代码是:
import csv
print ("Welcome to the teacher view.\n"
"Here you can view the test results.\n")
option = int(input("Which class would you like view?\n"
"For Class 1 - enter 1: \n"
"For Class 2 - enter 2: \n"
"For Class 3 - enter 3: \n"))
if option ==1:
with open("classthree.csv")as classone:
classoneReader = csv.reader(classone)
classonelist=[]
for row in classoneReader:
row[1] = int(row[1])
classonelist.append(row[0:2])
print(classonelist)
我存储在csv文件中的代码示例是:
约什希尔8 丽莎黑尔7 马克斯伍德10 莎莉琼斯5 大卫·韦斯特2
程序应阅读此信息并将其附加到列表中。我想为每个学生显示最新的3个分数。
答案 0 :(得分:3)
你可以使用双端队列,设置maxlen=3
,这样你只保留最新的3个:
from collections import deque
deq = deque(maxlen=3)
如果你想在文件中实际保留最新的三个分数,你需要通过覆盖更新分数,如果是这种情况使用带有json的dict可能是一种更简单的方法来存储数据,使用密钥访问学生分数。
答案 1 :(得分:1)
所以你想从列表中获取最后3个分数? Slicing就是答案:
>>>mylist = [1,2,3,4,5,6]
>>>mylist[-3:]
[4,5,6]
这假设您使用append
作为增长列表的方法。
答案 2 :(得分:0)
假设您在数据文件中每位学生的得分超过1分,例如:
Josh Hill,8,4,0,1,2
Lisa Hale,7,6,3,4,5
Max Wood,10,12,6,7,8
Sally Jones,5,5,9,10,11
David West,2,8,12,13,14
您可以使用slice syntax从每行中提取最后三个分数,如下所示:
import csv
with open("classthree.csv", newline='') as classone:
classoneReader = csv.reader(classone)
classonelist=[]
for row in classoneReader:
row[1:] = list(map(int, row[1:])) # convert scores to integers
classonelist.append([row[0]] + row[-3:])
print('classonelist:')
for student in classonelist:
print(' {:<15} last three scores: {}'.format(student[0]+',', student[1:]))
输出:
classonelist:
Josh Hill, last three scores: [0, 1, 2]
Lisa Hale, last three scores: [3, 4, 5]
Max Wood, last three scores: [6, 7, 8]
Sally Jones, last three scores: [9, 10, 11]
David West, last three scores: [12, 13, 14]