2014-03-27 4 views
0

Я делаю программу, в которой перечислены студенты, их степень и курсы, среди прочего, для просмотра. Мне не удалось обернуть вокруг себя то, что было бы способом перебора элемента определенного индекса в списке списков. Список списков содержит информацию о студенте, как это:Оценка элемента определенного индекса в списке в списке

[['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']] 

То, что я хочу сделать, это оценить первый элемент каждого списка с входом, я получаю от входа виджета. Первый пункт - это год, когда студент начал учебу. Поэтому в поле «Ввод» я спрашиваю, какие студенты года хотят просматривать. Если значение оценивает 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 класса с «студент» объекта и возвращает весь список списков, как показано выше. Аргументом «год» является StringVar, который я получаю из виджета Entry. Этот код возвращает пустой список каждый раз (и еще не ограничивает поиск индексом). Каков наилучший способ сделать это?

EDIT:

Более важно код:

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

Так как дизайн наконечника, «The parse_student_info() - метод вызывается из класса Student с„студент“объекта и возвращает весь список списков, как показано выше.» Этот тип функции не должен принадлежать объекту «Студент». «Студентам» не нужно ничего знать, кроме самих себя. – CoryKramer

ответ

0

Цель состоит в том, чтобы получить результат parse_student_info() и вернуть список списков, где первый элемент каждого подписок соответствует заданному значению, да? Попробуйте это:

def searched_year(self, year): 
    return [rec for rec in self.student.parse_student_info() if rec[0] is year] 
+0

Ваш способ сделать это выглядит так, что он должен работать, но когда я его пробовал, программа по-прежнему печатала пустой список. Я не знаю, что вызывает это. Я редактировал свой пост, чтобы получить дополнительную информацию, если это полезно. – jonraem

+0

Это означает, что проблема заключается в анализе файла или получении ввода года. Ваш 'parse_student_info()' выше будет работать до тех пор, пока каждая строка в файле выглядит так: '2004S; 3001; Johnson John; 149; HETY2; STIL'. Это оставляет search_year(), о котором я могу сказать мало. Учитывая, что годы в образце данных все имеют 'S' в конце, возможно ли, что вы получаете ввод, это всего лишь номер без S? – khagler

+0

Да, я решил это сейчас. Спасибо за помощь! У меня это было так, как вы описали в исходном комментарии, но я изменил 'StringVar' на' IntVar' и превратил последнее предложение 'if', чтобы содержать' in' вместо 'is'. Например: 'return [sublist для sublist в self.student.parse_student_info(), если str (год) в подсписке [0]]' – jonraem

Смежные вопросы