[英]pulling data from a list of lists if each list meets a condition
我正在尝试在自己构造的类中获得一种可行的方法。 这堂课积累了给定学生的课程历史。 每门课程都是一个列表(名称,年级,学分等),是该学生所有课程总列表的一部分。 这是示例课程历史记录:
[['English 1', 4, 3, 'Fall', '2009'],
['English 2', 3.7, 3, 'Spring', '2010'],
['English 3', 2.7, 3, 'Fall', '2010'],
['English 4', 3.0, 3, 'Spring', '2011'],
['English 5', 3.7, 3, 'Fall', '2011'],
['English 6', 3.3, 3, 'Spring', '2012'],
['Math 1', 3.3, 3, 'Fall', '2009'],
['Math 2', 2.7, 3, 'Spring', '2010'],
['Science 1', 3.7, 4, 'Fall', '2009'],
['Science 2', 4, 4, 'Spring', '2010']]
我可以算出累积GPA,但发现很难确定一个学期的GPA。 这是我的相关代码:
class StudentInfo(object):
def __init__(self, last, first, dob):
self.last=last
self.first=first
self.dob=dob
self.gradehist=[]
def __add__(self, course):
return self.gradehist.append(course)
def cumulativegpa(self):
cred = [item[2] for item in self.gradehist]
grad = [item[1] for item in self.gradehist]
gc = [grad[i]*cred[i] for i in range(len(grad))]
hrs = sum(cred)
gpasum = sum(gc)
cumgpa = gpasum/hrs
return cumgpa
def semgpa(self, x, y):
semcred=[]
semgrad=[]
for i in self.gradehist:
if self.gradehist[3] == x and self.gradehist[4] == y:
semcred.append([item[2] for item in self.gradehist])
for i in self.gradehist:
if self.gradehist[3] == x and self.gradehist[4] == y:
semgrad.append([item[1] for item in self.gradehist])
return semcred, semgrad`
s1=StudentInfo('Bob','Dole', '1-1-1911')
s1 + ['English 1', 4, 3, 'Fall', '2009']
s1 + ['English 2', 3.7, 3, 'Spring', '2010']
etc
当我键入s1.cumulativegpa()时,它返回正确的总gpa,但是s1.semgpa('Fall','2009')返回“ [],[]”我在哪里出错?
编辑:更新def semgpa(self, x, y):
包括
for course in self.gradehist: if course[3] == x and course[4] == y: semcred.append([item[2] for item in course])
我不确定这是否是您想要的,但是您可以这样尝试:
def semgpa(self, x, y):
semcred=[]
semgrad=[]
for row in self.gradehist:
if row[3] == x and row[4] == y:
semcred.append(row[2])
semgrad.append(row[1])
return semcred, semgrad
首先,您遍历所有行。 然后,您只选择属于所选学期的行。 然后,您可以将这些行中的值附加到新列表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.