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