基本上我想要的是一个采用两个数组的方法
array1=[1, 2, 3]
array2=[math.pow(x, 3), math.pow(x, 2)+x, 3*x]
在方法内部使用array1的第一个元素作为array1的第一个函数中的x,array2的第二个元素作为array2的第二个函数中的x,依此类推。
def cal(array1, array2):
我查看了stackoverflow,我得到的关闭是使用lambda
或使用函数调用方法,但没有一个解决了我的问题。
答案 0 :(得分:3)
您正在寻找python lambda functions:
>>> import math
>>> array1 = [1, 2, 3]
>>> array2 = [lambda x: math.pow(x, 3), lambda x: math.pow(x, 2)+x, lambda x: 3*x]
>>> for function in array2:
... print map(function, array1)
...
[1.0, 8.0, 27.0]
[2.0, 6.0, 12.0]
[3, 6, 9]
基本上,每个函数都作为一个可调用的lambda存储在一个数组中,然后,使用内置的map
为array1的所有值调用每个函数。
作为列表理解,返回列表列表:
>>> [map(function, array1) for function in array2]
[[1.0, 8.0, 27.0], [2.0, 6.0, 12.0], [3, 6, 9]]
如果要根据相同的索引将函数应用于每个项目,可以使用:
>>> [y(x) for (x, y) in zip(array1, array2)]
[1.0, 6.0, 9]
答案 1 :(得分:1)
这确实是你想要的:
import math
array1 = [1, 2, 3]
array2 = ['math.pow(x, 3)', 'math.pow(x, 2)+x', '3*x']
def cal(values, expressions):
return [eval(expression, {'math': math, '__builtins__': None}, {'x': value})
for value, expression in zip(values, expressions)]
print(cal(array1, array2))
输出:
[1.0, 6.0, 9]