#python #python-3.x
Вопрос:
Спасибо тому, кто помог мне в предыдущем посте, я могу найти средние значения каждого класса в словаре и распечатать среднее значение средних значений с помощью этого кода:
def avg(classes): average = {} for classnames, grades in classes.items(): average[classnames] = sum(grades) / len(grades) return average classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]} averages = avg(classes) print("Average grades in each class:", averages) average_of_averages = sum(averages.values())/len(averages) print("Average of average grades:", average_of_averages)
Я просто хочу знать, есть ли способ рассчитать средние значения (как для средней оценки в каждом классе, так и для среднего значения этих средних, суммированных вместе) без использования встроенной функции sum().
Я думаю, что мне нужен вложенный цикл for: один цикл для среднего значения в каждом классе, а затем другой цикл, чтобы найти среднее значение этих средних, но я не знаю, как это сделать, потому что в каждом ключе есть несколько значений.
Комментарии:
1. Думайте в терминах функций. Вы не можете использовать
sum
по какой-то причине. Хорошо — напишите функцию, чтобы она делала то, что вам нужно. Как быdef custom_sum(list_of_ints):
это выглядело?2. @j1-lee Я просто тестирую различные способы использования словарей Python, я знаю, что использование sum () — самый простой способ, но я думаю, что это просто помогает мне больше практиковаться в использовании разных способов
Ответ №1:
почему бы не использовать pandas
вместо этого гораздо проще и быстрее, чем с помощью циклов. Вот код, который вам нужно будет использовать:
import pandas as pd classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]} df = pd.DataFrame(classes) avg = df.mean() avg_of_avg = avg.mean()
Ответ №2:
вы можете использовать numpy.mean()
и приводить averages.values()
к списку
import numpy as np def avg(classes): average = {} for classnames, grades in classes.items(): average[classnames] = np.mean(grades) return average classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]} averages = avg(classes) print("Average grades in each class:", averages) average_of_averages = np.mean(list(averages.values())) print("Average of average grades:", average_of_averages)
Ответ №3:
Да, вы можете просто добавить второй цикл следующим образом:
def avg(classes): average = {} for classnames in classes: total = 0 for grade in classes[classnames]: total = grade average[classnames] = total / len(classes[classnames]) return average classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]} averages = avg(classes) print("Average grades in each class:", averages) total_averages = 0 for classname in averages: total_averages = averages[classname] average_of_averages = total_averages / len(averages) print("Average of average grades:", average_of_averages)
Если вы хотите, вы также можете полностью пропустить часть расчета каждого из средних значений по отдельным классам и просто рассчитать все среднее значение сразу следующим образом:
def avg(classes): total = 0 total_length = 0 for classnames in classes: for grade in classes[classnames]: total = grade total_length = len(classes[classnames]) return total / total_length classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]} average_of_averages = avg(classes) print("Average of average grades:", average_of_averages)
Комментарии:
1. Чтобы получить average_of_averages, есть ли другой способ сделать это без использования sum() в строке?
2. @встряхнул Да! Вы можете использовать аналогичный цикл для вычисления этого, а также я отредактировал свой ответ, чтобы показать это