将map()与.append()方法一起使用时,为什么返回四个列表

时间:2018-12-26 23:12:38

标签: python python-3.x list

我正在尝试使用方法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 :(得分:3)

内置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))

答案 1 :(得分:0)

map为输入序列中的每个对象返回一个输出对象。您的输入序列有4个对象,因此输出有4个对象。它们都是相同的,因为您的函数总是返回相同的numbers_tmp object 。要解决此问题,请停止在map中使用全局变量。

答案 2 :(得分:0)

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)))