2015-12-15 2 views
2

Я работаю над проблемой, но мне интересно, как лучше форматировать мой вывод. В принципе, я работаю с массивом, который в Python - это в основном список в списке, или я должен указывать вложенные списки. Вопрос, над которым я работаю, связан со средним рейтингом обзоров фильмов, но позволяет просто сказать, что первый столбец является «рецензентом» с номерами 1-3 или 1-5 (в зависимости от размера массива) и обзорами фильмов это строки, опять же размер зависит от самого массива, 3x3, 6x6 и т. д. Итак, ниже я включу свой код.Python 3 - Помощь в форматировании массива/выходе таблицы

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) 

Теперь, это действительно работает нормально, насколько расчеты идут, но то, что мне нужно сделать, это есть «Рецензент Среднее значение» номер 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 
+0

Вы уверены, что ваши средние правильно? – erip

+0

Помимо того, что вы не сбрасываете общий итог, вы также, кажется, путаете строки и столбцы. 'ncols' и' row in array' относятся к первым массивам в 'array'. – Junuxx

ответ

2

Вы не усредняя правильно, поэтому я взял на себя смелость решить этот вопрос. Теперь, в соответствии с вашим вопросом: использовать 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 

Edit: обновленный код, чтобы включить комментарий erip в ниже.

+0

Вы можете использовать 'enumerate (array, 1)', тогда вам не нужно 'i + 1' – erip

+0

Спасибо, это их другой способ сделать это без перечисления? Мне просто интересно узнать все возможные пути, если они существуют. – Jabgan

+0

@Jabgan Есть способы, но 'перечисление' является наиболее pythonic. – erip

0

Вы можете использовать некоторые более вещий конструкции:

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 
Смежные вопросы