在Python中遍历嵌套列表

1 投票
4 回答
1893 浏览
提问于 2025-04-16 12:11

我在学习指南上遇到了一个问题,要求写一个函数,能够计算二维列表的平均值,并把结果打印成一个列表。因为我对二维列表没有什么经验,所以完全不知道该从哪里入手解决这个问题。

下面是它应该完成的示例:

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

我在代码中哪里出错了呢?

4 个回答

0

这里没有求和的意思。你需要把每一行的元素加起来,然后再除以元素的数量(在这个例子中是3)。

1

第1、2和4个数字是第1、2和4个列表的平均值,但第3个不是。我猜这可能是个笔误,你的意思是“69.666...”。

你在“L[i][j] / i”这一部分出错了。可以把这句话理解为计算一个值,然后把它丢掉;你并没有把它赋值给任何东西。你可能想返回一个新的列表,而不是把值放到参数里。此外,你在循环和索引方面也出错了,实际上没有计算出平均值。还有,在j循环中也有问题:如果某个列表的值比另一个多怎么办?另外,你没有用Python的风格来写,而是用范围和索引来循环列表,而不是直接循环列表中的项(比如用“for sublist in 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

首先,表达式 x / y 会得到一个结果值,但不会改变 xy 的值。如果你在使用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

撰写回答