Зачем возвращать четыре списка при использовании map () с методом .append () - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь проверить функцию 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]
]

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Встроенный 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))
0 голосов
/ 27 декабря 2018
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)))
0 голосов
/ 27 декабря 2018

map возвращает один выходной объект для каждого объекта во входной последовательности.Ваша входная последовательность имеет 4 объекта, поэтому на выходе есть 4 объекта.Они все одинаковые, так как ваша функция всегда возвращает один и тот же numbers_tmp объект .Чтобы устранить проблему, прекратите использование глобальных переменных в map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...