我的学习指南中有这个问题,它需要一个获取二维列表平均值的函数,并将它们打印为一个列表。 我真的没有经验弄乱二维列表,因此不知道哪里开始攻击这个问题。
它应该做什么的例子:
avrg([[85, 23, 45], [66, 75, 54], [85, 54, 70], [34, 10, 0]])
[51.0, 65.0, 162.333333333334, 14.66666666666667]
我的编码:
def avrg(L):
for i in range(len(L)):
for j in range(len(L[0])):
L[i][j] / i
return L
我的编码在哪里出错了?
答案 0 :(得分:1)
第1,第2和第4个数字是第1,第2和第4个列表的平均值,但第3个不是。我会认为这是一个错字,你的意思是'69 .666 ......'。
你在'L [i] [j] / i'位置出错了。您可以将该语句视为计算值,然后将其删除;你没有把它分配给任何东西。您可能也希望返回一个新列表,而不是将值放入参数中。此外,您在循环和索引中出错,而不是实际计算平均值。另外,你在j循环中出错了:如果某个列表的值多于另一个列表怎么办?另外,你通过不使用pythonic并使用范围和索引在列表上循环而不是循环遍历项目本身('对于L中的子列表:'')来“错误”。另外,你没有使用列表推导就错了。
这就是我要做的事情:
def avrg(L):
return [sum(sublist) / len(sublist) for sublist in L]
print(avrg([[85, 23, 45], [66, 75, 54], [85, 54, 70], [34, 10, 0]])
答案 1 :(得分:1)
首先,表达式x / y
会产生一个值,但不会更改x
或y
。如果您正在使用Python,您可能还想考虑在迭代中使用实际列表内容而不是更像C的“范围”和访问器。希望这会给你一个强有力的推动正确的方向:
def avrg( inlist ):
result = []
for a in inlist:
# now "a" is just a list by itself
n = len(a)
total = sum(a)
# you can fill in the rest here
return result
答案 2 :(得分:0)
没有总结。 您必须在每行中添加元素,然后除以长度(在本例中为3)。
答案 3 :(得分:0)
import numpy as np
def avrg(ls):
return map(np.average, ls)