我有一个包含 m 个元素的列表和 n 个出现在字符串列表中的不同数字。该列表遵循以下格式示例
eq = ['12', '2', '3', '-123', '-1', 'X']
请注意,X 表示常量 1,而不是变量 1。我希望能够将其转换为一个 lambda 函数,该函数接受一个列表 x 并像将这个列表加在一起一样工作。对于我们的示例,函数将是
f(x) = x[1]*x[2] + x[2] + x[3] - x[1]*x[2]*x[3] - x[1] + 1
我知道如何使用普通函数执行此操作,但我想让它与 lambda 一起工作,但碰壁了。任何帮助,将不胜感激!
这是解决问题的函数:
def evaluateList(x, lst):
num = 0
for term in lst:
if term[0] == "X":
num += 1
elif term[0] == "-":
num -= reduce(lambda x,y: x*y, [x[int(y)-1] for y in term[1:]])
else:
num += reduce(lambda x,y: x*y, [x[int(y)-1] for y in term])
return num
最佳答案
我认为这很简单:
from operator import mul
from functools import reduce
prod = lambda L: reduce(mul, L, 1)
evaluateList = lambda(x, eq): sum(
1 if expr == 'X'
else prod(-1 if i == '-'
else x[int(i)]
for i in expr)
for expr in eq)
关于python - 从字符串序列创建 Python lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003389/