Python 从用户输入创建ID和相应值的二维列表

Python 从用户输入创建ID和相应值的二维列表,python,python-3.x,list,user-input,Python,Python 3.x,List,User Input,我需要一个二维列表来存储有关学生及其成绩的信息 当我运行我的程序时,我只得到一个数字列表,但我需要为每个学生提供单独的列表。有人能帮我吗 这就是我到目前为止所做的: COLS= int(input("number of students to enter ")) ROWS= int(input("number of grades per student ")) def main(): number =[] for c in range(COLS): stud

我需要一个二维列表来存储有关学生及其成绩的信息

当我运行我的程序时,我只得到一个数字列表,但我需要为每个学生提供单独的列表。有人能帮我吗

这就是我到目前为止所做的:

COLS= int(input("number of students to enter "))
ROWS= int(input("number of grades per student "))

def main():
    number =[]


    for c in range(COLS):
        student =(input("enter student ID number "))
        number.append(student)

        for r in range (ROWS):
            grades =(input("Enter grade for module: "))
            number.append(grades)

    print(number)

my result is 
number of students to enter 2
number of grades per student 4
enter student ID number 1234
Enter grade for module: 55
Enter grade for module: 66
Enter grade for module: 43
Enter grade for module: 33
enter student ID number 2345
Enter grade for module: 34
Enter grade for module: 56
Enter grade for module: 78
Enter grade for module: 99
['1234', '55', '66', '43', '33', '2345', '34', '56', '78', '99']
>>> 
您需要为每行创建一个新列表:

for c in range(COLS):
    grades = []
    student =(input("enter student ID number "))
    number.append(student)
    number.append(grades)

    for r in range (ROWS):
        grade =(input("Enter grade for module: "))
        grades.append(grade)
您需要为每行创建一个新列表:

for c in range(COLS):
    grades = []
    student =(input("enter student ID number "))
    number.append(student)
    number.append(grades)

    for r in range (ROWS):
        grade =(input("Enter grade for module: "))
        grades.append(grade)

在将列表插入
number
列表之前,只需构建一个列表:

for c in range(COLS):
    student =(input("enter student ID number "))
    temp_arr = [student] # make a temporary array for the student id and their grades

    for r in range (ROWS):
        grades =(input("Enter grade for module: "))
        temp.append(grades) # append to the temp array here

    # after you are done getting the grades
    # insert the entire temp array into the number array
    number.append(temp)

此外,如果您制作了一个班级
学生
,该班级可能会有一个
id
和一个
等级列表
,只需在将其插入
编号
列表之前建立一个列表,就可以更好地存储这些数据:

for c in range(COLS):
    student =(input("enter student ID number "))
    temp_arr = [student] # make a temporary array for the student id and their grades

    for r in range (ROWS):
        grades =(input("Enter grade for module: "))
        temp.append(grades) # append to the temp array here

    # after you are done getting the grades
    # insert the entire temp array into the number array
    number.append(temp)

此外,如果您创建一个班级
学生
,该班级可能会以更好的方式存储此数据,该班级可能会有一个
id
和一个
成绩列表
,我会使用一个按学生id索引的字典:

COLS= int(input("number of students to enter "))
ROWS= int(input("number of grades per student "))

def main():
    student_grades = {}

    for c in range(COLS):
        student =(input("enter student ID number "))
        grades = []

        for r in range (ROWS):
            grade =(input("Enter grade for module: "))
            grades.append(grade)
        student_grades[student] = grades

我将使用按学生id索引的词典:

COLS= int(input("number of students to enter "))
ROWS= int(input("number of grades per student "))

def main():
    student_grades = {}

    for c in range(COLS):
        student =(input("enter student ID number "))
        grades = []

        for r in range (ROWS):
            grade =(input("Enter grade for module: "))
            grades.append(grade)
        student_grades[student] = grades

根据我的评论,一个这样做的例子是:

请注意,这是中的词典,而不是列表。这更适合数据,并将使以后更容易使用它

另一个注意事项是,在用户决定不输入更多学生之前,重复此操作可以实现更好的界面,而不是预先询问将输入多少学生:

rows = int(input("Number of grades per student: "))

def get_students():
    while True:
        value = input("Enter student ID number, or nothing to finish: ")
        if not vale:
            return
        else:
            yield value

grades = {student: [input("Enter grade for module: ") for _ in range(rows)] 
          for student in get_students()}

在这里,这是通过一个生成器实现的,它生成从用户处获得的新学生编号,直到用户不输入任何内容。

根据我的评论,这是一个通过以下方式实现的示例:

请注意,这是中的词典,而不是列表。这更适合数据,并将使以后更容易使用它

另一个注意事项是,在用户决定不输入更多学生之前,重复此操作可以实现更好的界面,而不是预先询问将输入多少学生:

rows = int(input("Number of grades per student: "))

def get_students():
    while True:
        value = input("Enter student ID number, or nothing to finish: ")
        if not vale:
            return
        else:
            yield value

grades = {student: [input("Enter grade for module: ") for _ in range(rows)] 
          for student in get_students()}

这是通过一个生成器实现的,该生成器生成从用户处获得的新学生号,直到用户不输入任何内容。

我认为最好使用列表字典,而不是二维列表——列表列表——因为它使输入和访问数据的访问更容易和可读。出于同样的原因,我还将其名称从您代码中的
number
更改为下面代码中的
grades
,以更好地反映其内容

COLS = int(input("number of students: "))
ROWS = int(input("number of grades per student: "))

grades = {}

def main():
    for c in range(COLS):
        student = int(input("enter student ID: "))
        grades[student] = []  # initialize to empty row of grades

        for r in range(ROWS):
            grade = int(input("Enter grade for module: "))
            grades[student].append(grade)

    for student in grades.keys():
        print 'student:{}, grades:{}'.format(student, grades[student])
输入样本数据后的输出:

学生:2345,年级:[34,56,78,99]
学生:1234,年级:[55,66,43,33]

我认为最好使用列表字典,而不是二维列表——列表列表——因为它使数据的输入和以后的访问更容易和可读。出于同样的原因,我还将其名称从您代码中的
number
更改为下面代码中的
grades
,以更好地反映其内容

COLS = int(input("number of students: "))
ROWS = int(input("number of grades per student: "))

grades = {}

def main():
    for c in range(COLS):
        student = int(input("enter student ID: "))
        grades[student] = []  # initialize to empty row of grades

        for r in range(ROWS):
            grade = int(input("Enter grade for module: "))
            grades[student].append(grade)

    for student in grades.keys():
        print 'student:{}, grades:{}'.format(student, grades[student])
输入样本数据后的输出:

学生:2345,年级:[34,56,78,99]
学生:1234,年级:[55,66,43,33]

+1,这在这里很有意义-请注意,在不太可能的情况下,它们的输入顺序很重要,这不会记录(
dict
s无序)。正确!在这种情况下,您可以使用
集合.OrderedDict
+1,这在这里很有意义-请注意,在不太可能的情况下,它们的输入顺序很重要,这不会记录这些(
dict
无序)。正确!在这种情况下,您可以使用集合。OrderedDict。请注意,您在此处构建列表,一种简单有效的方法是使用。请注意,您在此处构建列表,一种简单有效的方法是使用。这实际上似乎不起作用。。。当
grades
附加到
number
后,它仍然是空的,
grades
本身不是对列表中实际包含的项目的引用,因此更改它不会更新
number
中包含的列表。当更新列表之外的
grades
时,Python中的所有内容都是引用,它也会影响列表中的内容(因为它们是相同的东西)。啊。对不起,我弄错了--我在测试时漏掉了最后一行。(这很愚蠢,因为理论上我知道Python是通过引用传递的;我只是不总是相信它是通过引用传递的。)这实际上似乎不起作用。。。当
grades
附加到
number
后,它仍然是空的,
grades
本身不是对列表中实际包含的项目的引用,因此更改它不会更新
number
中包含的列表。当更新列表之外的
grades
时,Python中的所有内容都是引用,它也会影响列表中的内容(因为它们是相同的东西)。啊。对不起,我弄错了--我在测试时漏掉了最后一行。(这是愚蠢的,因为理论上我知道Python是通过引用传递的;不知何故,我并不总是相信它是通过引用传递的。)