【问题标题】:Python 3 - Help formatting array/table outputPython 3 - 帮助格式化数组/表格输出
【发布时间】:2015-12-15 00:31:33
【问题描述】:

我正在解决一个问题,但我很好奇如何更好地格式化我的输出。基本上,我正在使用一个数组,它在 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)

现在,就计算而言,这确实可以正常工作,但我需要做的是根据数组中的列,或者换句话说,它应该根据数组大小输出列号。例如,像我上面代码中的原始数组一样的 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

【问题讨论】:

  • 你确定你的平均值是正确的吗?
  • 除了不重置总数之外,您似乎还混淆了行和列。 ncolsrow in array 都引用 array 中的第一个数组。

标签: python arrays python-3.x


【解决方案1】:

你没有正确地取平均值,所以我冒昧地也解决了这个问题。现在,根据您的问题:使用enumerate,如下所示:

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 的评论合并到下面。

【讨论】:

  • 你可以使用enumerate(array, 1)然后你不需要i+1
  • 谢谢,他们还有其他方法可以做到这一点吗?我只是想了解所有可能的方法,如果它们存在的话。
  • @Jabgan 有办法,但enumerate是最pythonic的。
  • @erip,谢谢。我将您的评论纳入我的回答中。
  • @erip 好的,如果你能回答,还有什么办法?我还在学习,所以我想尽可能多地了解。
【解决方案2】:

您可以使用更多 Pythonic 构造:

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

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多