2013-04-02 63 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