我正在制作一个程序,列出学生,他们的学位和课程,以及其他用于浏览的内容。我还没有能够绕过在列表列表中迭代特定索引项的方法。列表列表包含以下学生信息:
[['2004S','3001','Johnson John','149','HETY2','STIL'],
['2004S','3002','Steveson Steve','224','HETY2','SEIT'],
['2004S','3003','Jackson Jack','270','HETY2','SEIT'],
...
['2007S','3124','Ericsson Eric','286','HETY2','SPII']]
我想要做的是使用Entry小部件中的输入来评估每个列表的第一项。第一项是学生开始学习的那一年。因此,在Entry字段中,我会询问用户想要浏览哪些年份的学生。如果值的计算结果为true,我会将整个列表附加到另一个列表中,所有这些列表都会在稍后显示在屏幕上。像这样:
class Model():
...
def searched_year(self, year):
for object in self.student.parse_student_info():
for elem in range(len(self.student.parse_student_info())):
matching = [object for elem in object if str(year) in elem]
return matching
从parse_student_info()
课程中调用Student
方法,其中包含'学生' object,它返回整个列表列表,如上所示。争论的年份'是我从Entry小部件获得的StringVar
。此代码每次都返回一个空列表(并且尚未将搜索限制为索引)。这样做的最佳方式是什么?
编辑:
更重要的代码:
class Student():
...
def parse_student_info(self):
with open('opiskelijat.txt', 'r') as src:
separ = src.readlines()
studentinfo = [elem.strip().split(';') for elem in separ]
return studentinfo
这是parse_student_info()
类中的Student
方法。它返回您在上面看到的列表列表。它按预期工作。下面是调用相关方法的search_year()
方法。
UIController():
...
def search_year(self, year):
mode = Model()
return mode.searched_year(year)
UIController
类控制包含按钮和其他小部件的所有不同Frame
类,并且它还与处理来自Model
的信息的Student
类进行交互。 ,Course
和Degree
类。
到目前为止,该方法仍然会打印一个空列表。
答案 0 :(得分:0)
目标是获取parse_student_info()的输出并返回列表列表,其中每个子列表的第一个元素与给定值匹配,是吗?试试这个:
def searched_year(self, year):
return [rec for rec in self.student.parse_student_info() if rec[0] is year]