Я пытаюсь протестировать функцию map методом append и получаю неверный результат.
numbers = [
[34, 63, 88, 71, 29],
[90, 78, 51, 27, 45],
[63, 37, 85, 46, 22],
[51, 22, 34, 11, 18]
]
numbers_tmp = []
def mean_append(num_list):
numbers_tmp.append(sum(num_list) / len(num_list))
return numbers_tmp
print(list(map(mean_append, numbers)))
[57.0, 58.2, 50.6, 27.2]
[
[57.0, 58.2, 50.6, 27.2],
[57.0, 58.2, 50.6, 27.2],
[57.0, 58.2, 50.6, 27.2],
[57.0, 58.2, 50.6, 27.2]
]
Использовать ли нет побочные эффекты в map. Просто используйте цикл for






map возвращает один выходной объект для каждого объекта входной последовательности. Ваша входная последовательность состоит из 4 объектов, поэтому на выходе имеется 4 объекта. Все они одинаковы, поскольку ваша функция всегда возвращает один и тот же numbers_tmpобъект. Чтобы решить эту проблему, прекратите использование глобальных переменных в map.
И побочные эффекты.
Встроенный map работает с каждое значение в итеративном режиме. Итак, ваша функция должна включать логику, которая может быть применена к каждый подсписок:
def mean_calculator(num_list):
return sum(num_list) / len(num_list)
res = list(map(mean_calculator, numbers))
print(res)
[57.0, 58.2, 50.6, 27.2]
Как вариант, вы можете использовать statistics.mean из стандартной библиотеки:
from statistics import mean
res = list(map(mean, numbers))
numbers = [[34, 63, 88, 71, 29], [90, 78, 51, 27, 45], [63, 37, 85, 46, 22], [51, 22, 34, 11, 18]]
def mean_append(num_list):
return sum(num_list) / len(num_list)
print(list(map(mean_append, numbers)))
Почему вы сделали
numbers_tmpглобальной переменной, а затем проигнорировали ее содержимое в пользу того, что возвращаетmap?