提问人:joe 提问时间:12/27/2018 最后编辑:jppjoe 更新时间:1/14/2019 访问量:61
为什么在将 map() 与 .append() 方法一起使用时返回四个列表
Why return four lists when using map() with the method .append()
问:
我正在尝试使用该方法测试该函数,但得到了错误的输出。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赞
Ark-kun
12/27/2018
#1
map
为输入序列中的每个对象返回一个输出对象。输入序列有 4 个对象,因此输出有 4 个对象。它们都是相同的,因为您的函数总是返回相同的对象。若要解决此问题,请停止使用中的全局变量。numbers_tmp
map
评论
0赞
juanpa.arrivillaga
12/27/2018
和副作用。
3赞
jpp
12/27/2018
#2
内置映射
适用于可迭代对象中的每个值。因此,您的函数应该包含可应用于每个子列表的逻辑:
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赞
Hasitha
12/27/2018
#3
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
map