我有一个嵌套列表,看起来像这样:
[['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['Thorny', '100', '90', '80'],
['Mac', '88', '99', '111'],
['Farva', '45', '56', '67'],
['Rabbit', '59', '61', '67'],
['Ursula', '73', '79', '83'],
['Foster', '89', '97', '101']]
我可以使用以下命令提取学生姓名:
`def get_students(grades): student_names = [] for i in range(1,len(grades)): student_names.append(grades[i][0]) return student_names `
输出为['Thorny', 'Mac', 'Farva', 'Rabbit', 'Ursula', 'Foster']
现在我需要取出"Exam"头。我使用了类似的代码,但它得到了非常不同的结果。
`def get_assignments(grades): exam_list = [] for i in range(6, len(grades)): exam_list.append(grades[0][1 : ]) return exam_list`
返回输出:
`[['Exam 1', 'Exam 2', 'Exam 3']]`
我一直在看这里和GeeksForGeeks,试图找出我做错了什么。它似乎应该是一个简单的调整的第一个代码访问嵌套列表的不同部分,但我似乎不能得到它。如有任何建议,我将不胜感激。
编辑:抱歉,我的问题可能没有说清楚。期望的输出是['考试1','考试2','考试3']
谢谢!
这是一个使用列表理解的简短解决方案
lst=[['Student', 'Exam 1', 'Exam 2', 'Exam 3'], ['Thorny', '100', '90', '80'], ['Mac', '88', '99', '111'], ['Farva', '45', '56', '67'], ['Rabbit', '59', '61', '67'], ['Ursula', '73', '79', '83'], ['Foster', '89', '97', '101']]
lstStudents=[nlst[0] for nlst in lst]
lstExams=[nlst[1:] for nlst in lst[1:]]
print(lstStudents)
print(lstExams)
输出将是:
['Student', 'Thorny', 'Mac', 'Farva', 'Rabbit', 'Ursula', 'Foster']
[['100', '90', '80'], ['88', '99', '111'], ['45', '56', '67'], ['59', '61', '67'], ['73', '79', '83'], ['89', '97', '101']]
也许可以考虑将数据转换为字典列表,然后我们可以使用Python的列表推导式来检索您需要的任何内容。
grades = [['Student', 'Exam 1', 'Exam 2', 'Exam 3'], ['Thorny', '100', '90', '80'], ['Mac', '88', '99', '111'], ['Farva', '45', '56', '67'], ['Rabbit', '59', '61', '67'], ['Ursula', '73', '79', '83'], ['Foster', '89', '97', '101']]
headers = grades[0]
grades_list = [dict(zip(headers, student)) for student in grades[1:]]
print(*(grade for grade in grades_list if grade['Student']=='Rabbit'))
# Output {'Student': 'Rabbit', 'Exam 1': '59', 'Exam 2': '61', 'Exam 3': '67'}