Python 将math.functions数组作为参数传递给多个变量

Python 将math.functions数组作为参数传递给多个变量,python,Python,基本上我想要的是一个接受两个数组的方法 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或使用函数调用该方法,但没有一个解决了我的问题。您正在寻

基本上我想要的是一个接受两个数组的方法

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
或使用函数调用该方法,但没有一个解决了我的问题。

您正在寻找:

基本上,每个函数都存储为数组中的可调用lambda,然后使用内置的
映射
为数组1的所有值调用每个函数

作为列表理解,返回列表的列表:

>>> [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]

这就是你所说的你想要的:

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]

谢谢@mu無 , 我缺少的部分是内置的
map
。你知道有哪个内置函数做同样的事情,但是使用了一个不可iterable的参数,而不是遍历整个列表吗?对于array2中的函数,我可以使用'n=0 array=[]获得所需的输出:new_array=map(function,array1)数组。append(new_array[n])n=n+1`但是,这是一种资源浪费。@cadv我不确定是否完全理解您的意思。据我所知,map函数是实现这一点的常用方法;您可以使用列表理解来获得累积结果,如更新的答案中所示。如果您正在寻找基于相同索引的应用函数,请查看zip。@martineau我很好奇,您是如何理解函数被保存为字符串的,因此需要求值的?@mu無: 问题的标题提到传递一个函数数组,尽管示例代码显示了一个表达式数组,所以我选择了最简单的方法来表示表达式数组,并在不同的上下文中执行它们——我认为这才是它们真正的意思——加上其他任何东西都需要更多的脚手架才能工作(例如使用
lamda
s或class方法)。
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))