Python 3-帮助格式化数组/表输出

Python 3-帮助格式化数组/表输出,python,arrays,python-3.x,Python,Arrays,Python 3.x,我正在解决一个问题,但我很好奇如何更好地格式化我的输出。基本上,我使用的是数组,在Python中,数组基本上是列表中的列表,或者应该说是嵌套列表。我正在研究的问题与电影评论的平均评级有关,但让我们只说第一列是编号为1-3或1-5(取决于数组大小)的“评论人”,电影评论是行,同样,这取决于数组本身的大小,3x3、6x6等。下面我将包括我的代码 array = [[4,6,2,5], [7,9,4,8], [6,9,3,7]] def review(array): 'function th

我正在解决一个问题,但我很好奇如何更好地格式化我的输出。基本上,我使用的是数组,在Python中,数组基本上是列表中的列表,或者应该说是嵌套列表。我正在研究的问题与电影评论的平均评级有关,但让我们只说第一列是编号为1-3或1-5(取决于数组大小)的“评论人”,电影评论是行,同样,这取决于数组本身的大小,3x3、6x6等。下面我将包括我的代码

array = [[4,6,2,5], [7,9,4,8], [6,9,3,7]]

def review(array):
    'function that outputs average review of movie scores'

    ncols = len(array[0])  #finds number of columns in array 
    total = 0

    for row in array:
        for el in row:
            total+= el
            avg = total/ncols
            print(end = ' ')
        print(' Reviewer average:', avg)
现在,就计算而言,这确实可以很好地工作,但我需要做的是根据数组中的列数计算“Reviewer Average”数字1、2、3或1、2、3、4、5,或者换句话说,它应该根据数组大小输出列数。例如,一个3x3数组输出,就像上面代码中的原始数组一样,应该如下所示:

Reviewer 1 average: 4.25
Reviewer 2 average: 11.25
Reviewer 3 average: 17.5
然而,正如我所说的,我的问题是,我似乎不知道如何对它进行编号以适应任何表/数组大小,我希望它能够工作,无论它是6x6还是3x3,等等

我当前的输出如下所示:

Reviewer average: 4.25
Reviewer average: 11.25
Reviewer average: 17.5

你没有正确计算平均数,所以我冒昧地也解决了这个问题。现在,根据你的问题:像这样使用:

array = [[4,6,2,5], [7,9,4,8], [6,9,3,7]]

def review(array):
    'function that outputs average review of movie scores'

    for i, row in enumerate(array, 1):
        avg = sum(row)/len(row)
        print(' Reviewer {0} average: {1}'.format(i, avg))
输出:

 Reviewer 1 average: 4.25
 Reviewer 2 average: 7.0
 Reviewer 3 average: 6.25

编辑:更新代码以合并下面的erip注释。

您可以使用一些更具python风格的构造:

array = [[4,6,2,5], [7,9,4,8], [6,9,3,7]]
# Reviewer 1's average: (4+6+2+5)/4 = 4.25
# Reviewer 2's average: (7+9+4+8)/4 = 7
# Reviewer 3's average: (6+9+3+7)/4 = 6.25    

def review(array):
    'function that outputs average review of movie scores'

    for i, row in enumerate(array,1):
      average = sum(row) / float(len(row))
      print('Reviewer {} average: {}'.format(i, average))

review(array)
哪个输出正确的结果:

20:01 $ python test.py
Reviewer 1 average: 4.25
Reviewer 2 average: 7.0
Reviewer 3 average: 6.25

您可以使用
enumerate(array,1)
这样您就不需要
i+1
谢谢,他们有没有其他方法可以不用enumerate来实现这一点?我只是想知道所有可能的方法,如果它们存在的话。@Jabgan有很多方法,但是
enumerate
是最有吸引力的。@erip,谢谢你。我把你的评论纳入了我的回答中。@erip好吧,如果你能回答,还有什么办法?我还在学习,所以我想知道尽可能多的。你确定你的平均值是正确的吗?除了不重置总数之外,你似乎还混淆了行和列
NCOL
和数组中的
都是指
数组中的第一个数组