如何限制列表中的值 - Python 3

时间:2015-08-19 18:29:20

标签: python list python-3.x

我编写了一个程序,向用户询问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个分数。

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]