传递数组数学函数作为多变量的参数

2024-04-25 17:22:29 发布

您现在位置: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或使用函数调用该方法,但没有一个解决我的问题。你知道吗


Tags: 方法lambda函数元素defmath数组stackoverflow
2条回答

这就是你想说的:

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]

您正在寻找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]

相关问题 更多 >