我在列表中列出了大量数据:
data = [ [4,25,1,6,3,1,6,...],[45,2,1,5,6,20,29],[491,5,195,239,194,09]
..[2,1,5,6,1,95] ]
以及我一直试图弄清楚如何做的是计算每个列表的平均值并将其转换为如下所示的数据列:
List# average
1 (Mean value of the first list)
2 (Mean value of the second list)
....
15 (mean value of the 15th list)
我试图像这样进行迭代循环:
def average(data)
for i in range(16):
total = 0.0
for x in data[i]:
total = total + x
return total / len(data[i])
但它只计算到目前为止第一个列表的平均值。我还想计算每个单独列表的平均值,第一个数据被切掉,但我不知道如何用列表中的列表来做。
编辑:按建议更改但我仍然只有该函数的1个结果,而不是每个子列表的平均值。
答案 0 :(得分:0)
将 numb 替换为 x 。
你应该将你的返回取消一个。
不幸的是,根据您的目标可能会出现更多问题。 :)
编辑:我感到慷慨def average(listOfList):
for index, listOfNumbers in listOfList:
print ( "{}\t{}".format(index, sum(listOfNumbers) / len(listOfNumbers)) )
答案 1 :(得分:0)
代码问题是缩进错误。您的return
语句缩进到while
循环中。如果你修复它应该工作。但是最好使用平均函数来查找每个子列表的平均值和列表理解。
def average(l):
return sum(l)/len(l) #float(len(l)) if python 2.x
new_list = [average(lst[1:]) for lst in list] # since you want to cut off the first value.
另外,你不应该使用list
作为变量,因为它会重新分配内置函数。
答案 2 :(得分:0)
您可以使用内置sum
和len
功能:
l = [ [4,25,1,6,3,1,6],[45,2,1,5,6,20,29],[491,5,195,239,194,9],[2,1,5,6,1,95]]
new_l = {'List {}'.format(i):sum(a)/float(len(a)) for i, a in enumerate(l, start=1)}
输出:
{'List 4': 18.333333333333332, 'List 2': 15.428571428571429, 'List 3': 188.83333333333334, 'List 1': 6.571428571428571}
编辑:删除每个列表中的第一个值:
l = [ [4,25,1,6,3,1,6],[45,2,1,5,6,20,29],[491,5,195,239,194,9],[2,1,5,6,1,95]]
new_l = [i[1:] for i in l]
输出:
[[25, 1, 6, 3, 1, 6], [2, 1, 5, 6, 20, 29], [5, 195, 239, 194, 9], [1, 5, 6, 1, 95]]
编辑:舍入字典值:
l = [ [4,25,1,6,3,1,6],[45,2,1,5,6,20,29],[491,5,195,239,194,9],[2,1,5,6,1,95]]
new_l = {'List {}'.format(i):round(sum(a)/float(len(a)), 2) for i, a in enumerate(l, start=1)}
输出:
{'List 4': 18.33, 'List 2': 15.43, 'List 3': 188.83, 'List 1': 6.57}
答案 3 :(得分:0)
其他答案将解决您的问题,只是想让您知道您可以在一行中完成而没有任何循环:
data=[ [4,25,1,6,3,1,6],[45,2,1,5,6,20,29],[491,5,195,239,194,9],[2,1,5,6,1,95] ]
print(list(map(lambda x:sum(x)/len(x),data)))
#do your stuff with this result
输出:
[6.571428571428571, 15.428571428571429, 188.83333333333334, 18.333333333333332]