簡體   English   中英

如果每個列表都滿足條件,則從列表列表中提取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM