[英]What is wrong with this Spark RDD mapped with a lambda function with two arguments?
[英]defining a lambda function with two arguments
我有一些代码如下所示。
import math
square_root = lambda x: math.sqrt(x)
list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
map(square_root,list)
输出:
[1.0,
1.4142135623730951,
1.7320508075688772,
2.0,
2.23606797749979,
2.449489742783178,
2.6457513110645907,
2.8284271247461903,
3.0,
3.1622776601683795,
3.3166247903554,
3.4641016151377544,
3.605551275463989,
3.7416573867739413,
3.872983346207417,
4.0]
现在我想用power而不是square_root
import math
power = lambda x: math.power(x,n)
list = [1,2,3,4,5]
map(power,list,2)
TypeError Traceback(最近一次调用最后一次)/home/AD/karthik.sharma/ws_karthik/trunk/ in()----> 1 map(power,list,2)
TypeError:map()的参数3必须支持迭代
一种方法是:
power = lambda x, n: math.pow(x,n)
list = [1,2,3,4,5]
map(power,list,[2]*len(list))
表达式[2]*len(list)
创建另一个与现有列表长度相同的列表,其中每个元素包含值2. map
函数从其每个输入列表中获取一个元素并将其应用于power
函数。
另一种方式是:
power = lambda x, n: math.pow(x,n)
list = [1,2,3,4,5]
map(lambda x: power(x, 2),list)
它使用部分应用程序来创建第二个lambda函数,该函数只接受一个参数并将其提升到幂2。
请注意,您应该避免将名称list
用作变量,因为它是内置Python list
类型的名称。
列表推导是另一种选择:
list = [1,2,3,4,5]
[math.pow(x,2) for x in list]
import math
power = lambda n: lambda x: math.pow(x,n)
list = [1,2,3,4,5]
map(power(2),list)
像这样:
power = lambda x, n: math.pow(x,n)
list = [1,2,3,4,5]
map(lambda x: power(x, 2), list)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.