定义一个函数而不使用":"

时间:2016-09-16 20:42:35

标签: python

我被要求定义一个名为avg的函数。 avg应计算具有相同数量的两个列表的平均值 - 从两个列表中获取所有数字并计算其平均值。
但是,不允许使用:,也不允许使用多行(import行除外)。

我最接近的尝试是:

//import line does not count as a line
import numpy
//the code line (only one is allowed)
avg=lambda lst1,lst2: numpy.mean(lst1+lst2)

我的功能正确计算了列表的平均值,但它包含:,因此不够好。

3 个答案:

答案 0 :(得分:8)

如果有人问你一个毫无意义的问题,我会给他一个毫无意义的答案。他应得的。

import numpy  # You said it doesn't count as a line

# Take the : from dict's docstring.
exec("avg = lambda lst1, lst2{} numpy.mean(lst1+lst2)".format(dict.__doc__[213]))

>>> avg([1,2,3], [1,2,3])
2

答案 1 :(得分:3)

说到荒谬,我建议:

>>> exec(''.join(map(chr, [100, 101, 102, 32, 97, 118, 103, 40, 108, 115, 116, 49, 44, 32, 108, 115, 116, 50, 41, 58, 32, 114, 101,116, 117, 114, 110, 32, 48, 46, 53, 32, 42, 32, 115, 117, 109, 40, 108, 115, 116, 49, 32, 43, 32, 108, 115, 116, 50, 41, 32, 47, 32, 108, 101, 110, 40, 108, 115, 116, 49, 41])))
>>>
>>> avg([1,2,3,4],[5,6,7,8])
4.5

答案 2 :(得分:1)

您可以在Bharel的答案中使用exec但使用chr(58)

exec("avg = lambda lst1, lst2 " + chr(58) + " sum(lst1 + lst2, 0.) / (len(lst1) + len(lst2))")

print(avg([1,2,3], [4,5,6]))

或者如果你真的想使用numpy.mean:

exec("avg = lambda lst1, lst2 " + chr(58) + "numpy.mean(lst1+lst2)")