繁体   English   中英

Python lambda表达式,使用列表中的String作为操作数

[英]Python lambda expression, use String in list as operant

可以说我有一个简单的列表,例如lis = [5, *, 2]

是否可以按照以下方式做一些事情:

print(reduce(lambda x,y,z: float(x) y float(z), lis))
10

我想使用列表中给出的字符串来确定操作数。

首先,您不能将*运算符放在列表中,因为它不是Python中的值。 相反,您可以使用operator包中的mul函数:

from operator import mul

然后,假设您具有以下列表:

lst = [5, mul, 2]

您可以执行以下操作:

a, op, b = lst
print(op(a,b))

应该打印:

10

运算符无法在Python中传递-reduce reduce(+, [1,2,3])将为您提供SyntaxError 同样,您在列表中间的运算符也将如此。

如果要使用字符串查找运算符,则可以使用operator模块构造字典。

SYMBOL_TO_OPERATOR = {"*": operator.mul,
                      "+": operator.add, ...}

但是,这些只是普通方法-您不能像符号一样使用带有“中缀”符号的方法。

另外,这作为reduce操作没有多大意义(也不是非常惯用的python)。 您可以轻松地执行以下操作:

statements = [[1, "*", 5], [2, "+", 9]]
results = [SYMBOL_TO_OPERATOR[symbol](a, b) for a, symbol, b in statements]

让我知道我是否有误会,但我相信下面的内容可以满足您的要求:

import operator

operators = {
    '*': operator.mul,
    '/': operator.div
}

dynamic_operator = lambda x,y,z: operators[y](x, z)

some_list = [5, '*', 5]
print dynamic_operator(*some_list)

您将需要扩展operators字典,以包含要动态处理的所有操作。 有关更多运算符功能,请参见: https : //docs.python.org/2/library/operator.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM