2013-04-02 112 views
1
my_list = [['abcdefg','awdawdawd'],['awdwer'],[],'rtgerfwed','wederfrtg']] 

,所以我有一個名單,我想找到列表查找列表中項目的平均長度。 Python的

我想這內每個子列表的平均長度,但它似乎沒有工作

lengths = [] 
lengths = my_list 

for k in lengths: 
    k = len(k) 

print lengths 

# i get this again -> [['abcdefg','awdawdawd'],['awdwer'],[],'rtgerfwed','wederfrtg']] 

我想要的輸出是

lengths = [8,6,0,9] 
+1

您不修改列表,您正在修改臨時變量k。 – thegrinner

回答

4

每個元件的長度在一個列表中的列表:

lengths = [len(i) for i in my_list] 

對於一般:

def averageLen(lst): 
    lengths = [len(i) for i in lst] 
    return 0 if len(lengths) == 0 else (float(sum(lengths))/len(lengths)) 

如果它是一個列表的列表:

lengths = [averageLen(i) for i in my_list] 
+0

我喜歡這個,但是當長度爲零時出現錯誤。是做簡單的if語句最簡單的方法嗎? –

+0

@ draconisthe0ry啊,如果你傳遞一個帶有0個元素的列表,它會引發一個'ZeroDivisionError';固定的。 –

2

首先,遍歷列表中的蟒蛇只複製每個項的值到一個臨時變量。因此,實際上,在您的示例中,k被分配了列表中的每個項目的值,但更改它不會更改原始列表。其次,您似乎試圖將列表中的每個項目映射到其長度,而不是其項目的平均長度。使用內置函數mapmap(len,lengths)可以輕鬆地將每個項目映射到其長度。 但是,要完成您的要求,我們需要改進一點。讓我們定義一個函數來計算的列表中的項目平均長度:

def average_len(l): 
    return sum(map(len, l))/float(len(l)) 

現在我們可以再次使用地圖來獲取每個子列表的平均值:map(average_len, lengths)

+0

+1用於HOFs。 – hcalves