2013-04-23 34 views
0

我想在類中創建一個方法來計算python中列表的平均年齡。 基本上,假設我有一個名爲peoplelist的不同人名單,peoplelist中的每個人都有一個格式(身高,年齡,性別),例如person1 = 1.77,27,m。我需要獲得列表中每個人的年齡總和,然後將它除以列表的長度並返回結果。 到目前爲止,我有:試圖在類中創建一個方法來計算python中的列表的平均年齡

def __len__(self): 
    return len(self.peoplelist) 

def __age__(self): 
    agesum = 0 
    for value in self.peoplelist: 
     agesum = agesum + value.age 
     print(agesum) 
    return agesum/len(self.peoplelist) 

然而,這似乎並沒有工作,任何幫助或解釋爲什麼這不起作用,將不勝感激。

+1

以何種方式失敗?另外,命名'__age__'並不是一個好主意(只要'age'就可以正常工作)。該格式的雙下劃線名稱被保留供python用於特殊事物。既然如此,那麼對於那些爲你的班級閱讀API的人來說,這可能有點令人困惑。 – mgilson 2013-04-23 13:28:09

+1

你能分享一下錯誤嗎?或者你沒有得到預期的產出?一個變量'depthsum'似乎應該是'ageum'。你能檢查一下嗎? – gsmaker 2013-04-23 13:29:08

回答

0

假設value.age返回正確的值,下面應該工作...

def __age__(self): 
    agesum = 0 
    for value in self.peoplelist: 
     agesum = agesum + value.age 
    return agesum/len(self.peoplelist) 

如果不是這樣,你必須包括你是如何調用原題的函數的代碼。

+0

我不認爲它存儲爲元組,當我測試它時,value.age確實返回了年齡整數。當我在python shell中手動輸入for循環時,它正常工作,當我嘗試在程序中執行該方法時,它不起作用。難道我執行方法錯了嗎? – user1825241 2013-04-23 13:39:52

+0

@ user1825241請參閱更新。 – Aya 2013-04-23 13:47:20

0

可以使用sum()功能:

def age(self): 
    return sum(p.age for p in self.peoplelist)/float(len(self.peoplelist)) 

float();在Python 2中,除法整數給你地板劃分(舍入)默認情況下。或者,在您的python代碼的頂部添加from __future__ import division以啓用浮點除法。

請注意,我將方法命名爲.age();請僅爲special method names使用雙下劃線名稱(「dunder」)。

0

如果您self.peoplelist是象下面這樣:

[(1.77, 27, 'm'), ...] 

然後下面應該工作:

def __len__(self): 
    return len(self.peoplelist) 

def __age__(self): 
    agesum = 0 
    for value in self.peoplelist: 
     agesum = agesum + value[1] 
     print(agesum) 
    return agesum/len(self.peoplelist)