【发布时间】:2018-06-23 17:11:41
【问题描述】:
我有一个包含 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
【问题讨论】:
-
你能给出适合你的问题的函数定义吗?
-
@Carcigenicate 除非涉及到状态,这取决于实现可能有
-
@BowlingHawk95 我刚刚添加了工作功能实现。谢谢你的建议
-
@wjmccann 你遇到麻烦的原因是(如上所述),你不能在 lambda 中拥有状态。因为
num在迭代中改变值,所以该实现在 lambda 中不起作用。但一切都没有丢失!任何有状态的迭代算法都可以使用map、reduce和filter等组合子转换为无状态算法。该算法看起来与您上面的函数完全不同,但它是可行的。让我玩一下,看看我能想出什么。
标签: python string python-3.x function lambda