给定一系列数字,例如,seq = [2,4,2,4]然后使用python中的reduce和lambda计算其平均值。 我已经知道一个解决方案:
def my_mean(seq):
return reduce(lambda x, y: x + y, seq) / float(len(seq))
然后另一个想法来到我身边:
def my_mean(seq):
return reduce(lambda x, y: (x * seq.index(y) + y) / float(seq.index(y) + 1))
但第二种解决方案并不奏效。 坏情况:seq = [2,4,2]返回2.0,而seq = [2,2,4]返回3.0。实际上,返回值应该相同。 能不能给我一些提示,我的第二个解决方案有什么问题?谢谢,抱歉我的英语不好。
答案 0 :(得分:1)
首先,您错过了reduce
的第二个参数:seq
。
问题是,index
会找到第一个条目。如果你有重复,那将搞乱计算。
您可以使用enumerate
来修复它,但它根本不值得......