3
my_list = [['abcdefg','awdawdawd'],['awdwer'],[],'rtgerfwed','wederfrtg']]

所以我有一个列表,我想找到列表中每个子列表的平均长度

我试过了,但它似乎没有用

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]
4

2 回答 2

7

列表中每个元素的长度列表:

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]
于 2013-04-02T19:12:34.990 回答
3

首先,在 python 中迭代一个列表只会将每个项目的值复制到一个临时变量中。因此,实际上,在您的示例中,k为列表中的每个项目分配了一个值,但是更改它不会更改原始列表。其次,您似乎试图将列表中的每个项目映射到其长度,而不是映射到其项目的平均长度。使用内置函数可以轻松地将每个项目映射到其长度mapmap(len,lengths). 但是,要完成您的要求,我们需要进行一些改进。让我们定义一个函数来计算列表项的平均长度:

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

现在我们可以再次使用 map 来获取每个子列表的平均值map(average_len, lengths)

于 2013-04-02T19:26:53.940 回答