我正在尝试使用方法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]
]
答案 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)))