Сначала определите функцию усреднения, функцию, которая вычисляет среднее значение в итерируемом объекте:
def average(iterable):
sum = 0
for number in iterable:
sum += number
return sum / len(iterable)
Эта функция довольно проста.Он определяет переменную с именем «sum» и устанавливает ее начальное значение равным 0. Затем он проходит по параметру «iterable», добавляет к сумме все значения каждого элемента в итерируемом параметре.Затем он делит сумму всех значений (переменную суммы) на длину итерации.Возвращает результат в виде числа с плавающей запятой.
Пример: функция вызывается.Итерируемый аргумент присваивается списку [25, 75, -100, 20].Переменная sum начинается с 0. Посредством циклического повторения итераций она добавляет к сумме 25, 75, -100 и 20.Сумма заканчивается 20. Длина итерируемого, согласно методу len () в Python, равна 4. 20/4 = 5.0 (число с плавающей точкой, потому что один слеш в Python всегда представляет истинное деление, и возвращает плавающую точку, даже если результат остаетсято же самое после преобразования в int. Используйте две косые черты для целочисленного деления), и поэтому метод возвращает 5.0.
Назад к вашей программе.На мой взгляд, вы должны получить все средние, прежде чем сравнивать их.Определите список средних значений следующим образом.
averages = []
Очень просто.Устанавливает глобальную переменную «среднее» в пустой список.
Поскольку вы хотите получить средние значения для каждых трех чисел, вы должны выполнить шаг 3 итерированного диапазона, а не 1. Это делается следующим образом.
for counter in range(0, len(array), 3):
Конструктор диапазона принимает максимум три параметра (начало, остановка, шаг).Когда он принимает три параметра, он начинает считать с «начала», считать с помощью «шага» и останавливаться на «остановке».Он записывает каждое число, учитываемое в неизменяемом итерируемом объекте.Когда он принимает два параметра, «step» устанавливается на 1. Когда он принимает один параметр, «start» устанавливается на 0, «stop» устанавливается на параметр, а «step» устанавливается на 1.
Затем вы хотите добавить все средние в список «средних».Это делается следующим образом.
averages.append(average(array[counter: counter+3: 1]))
Метод добавления списка добавляет параметр, который он принимает, в конец списка.[Counter: counter + 3: 1] является индексом среза.Конструктор среза аналогичен диапазону, за исключением того, что это можно сделать с помощью этого формата: start: stop [: step], и он не повторяется, а, скорее, берет несколько элементов из итерируемого объекта, и эти индексы определяются параметрами.Среднее значение записывается в массиве средних значений.
Теперь вы получили все средние значения.Не нужно беспокоиться об IndexError, потому что срезы игнорируют любые индексы вне диапазона, не выбрасывая исключения.
Далее мы хотим сравнить средние значения друг с другом.Вот код:
for i in range(0, len(averages)):
for j in range(0, len(averages)):
if i == j:
#Avoid duplicate averages.
continue
if averages[i] < averages[j]:
#averages[i] < averages[j].
#Do something
continue
elif averages[i] == averages[j]:
#averages[i] == averages[j].
#Do something
continue
else:
#averages[i] > averages[j]. Only possibility left.
#Do something
continue
Вот как это делается.Мы проверяем индексы на средних значениях вместо самих средних для проверки на дубликаты.Если индексы совпадают друг с другом, мы продолжаем цикл, потому что не хотим иметь с ними дело.В противном случае мы сравниваем средние [i] со средними [j] и выполняем операторы python на основе условия.Вы не указали, что хотите сделать, поэтому я обработал их как дубликаты, хотя вы не должны этого делать.Остальная часть кода не требует пояснений.
Теперь для полного кода.Без комментариев:
def average(iterable):
sum = 0
for number in iterable:
sum += number
return sum / len(iterable)
#Same old array that you mentioned in your question
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
averages = []
for counter in range(0, len(array), 3):
averages.append(average(array[counter: counter+3: 1]))
for i in range(0, len(averages)):
for j in range(0, len(averages)):
if i == j:
#Avoid duplicate averages.
continue
if averages[i] < averages[j]:
#averages[i] < averages[j].
#Do something
continue
elif averages[i] == averages[j]:
#averages[i] == averages[j].
#Do something
continue
else:
#averages[i] > averages[j]. Only possibility left.
#Do something
continue
Я проверил свой код, напечатав результат между двумя различными средними значениями с этим кодом.
def average(iterable):
sum = 0
for number in iterable:
sum += number
return sum / len(iterable)
#Same old array that you mentioned in your question
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
averages = []
for counter in range(0, len(array), 3):
averages.append(average(array[counter: counter+3: 1]))
for i in range(0, len(averages)):
for j in range(0, len(averages)):
if i == j:
#Avoid duplicate averages.
continue
if averages[i] < averages[j]:
#averages[i] < averages[j].
#Do something
print("averages[{}] < averages[{}]".format(i, j))
elif averages[i] == averages[j]:
#averages[i] == averages[j].
#Do something
print("averages[{}] = averages[{}]".format(i, j))
else:
#averages[i] > averages[j]. Only possibility left.
#Do something
print("averages[{}] > averages[{}]".format(i, j))
print("Averages: ", averages)
И это был вывод.Запустите приведенный выше код тестирования, и вы получите тот же результат.
averages[0] < averages[1]
averages[0] < averages[2]
averages[0] < averages[3]
averages[1] > averages[0]
averages[1] < averages[2]
averages[1] < averages[3]
averages[2] > averages[0]
averages[2] > averages[1]
averages[2] < averages[3]
averages[3] > averages[0]
averages[3] > averages[1]
averages[3] > averages[2]
Averages: [2.0, 5.0, 8.0, 11.0]
Примечание. Я написал это в Python 3.7