Python lambda表达式,使用列表中的字符串作为运算符

Python lambda表达式,使用列表中的字符串作为运算符,python,Python,假设我有一个简单的列表,如lis=[5,*,2] 是否有可能按照以下方式做一些事情: print(reduce(lambda x,y,z: float(x) y float(z), lis)) 10 我想使用列表中给出的字符串来确定操作数 运算符不能在Python中传递--reduce(+,[1,2,3])会给您一个SyntaxError。同样,在列表中间的运算符也一样。 如果要使用字符串查找运算符,可以使用运算符模块构造字典 SYMBOL_TO_OPERATOR = {"*": operat

假设我有一个简单的列表,如
lis=[5,*,2]

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

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

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

运算符不能在Python中传递--
reduce(+,[1,2,3])
会给您一个
SyntaxError
。同样,在列表中间的运算符也一样。 如果要使用字符串查找运算符,可以使用
运算符
模块构造字典

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]

在Python中不能传递运算符--
reduce(+,[1,2,3])
会给您一个
SyntaxError
。同样,在列表中间的运算符也一样。 如果要使用字符串查找运算符,可以使用
运算符
模块构造字典

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]

首先,您不能将
*
运算符放在列表中,因为它在Python中不是值。相反,您可以使用
操作员
软件包中的
mul
功能:

from operator import mul
然后,假设您有以下列表:

lst = [5, mul, 2]
您可以执行以下操作:

a, op, b = lst
print(op(a,b))
其中应打印:

10

.

首先,您不能将
*
运算符放在列表中,因为它在Python中不是值。相反,您可以使用
操作员
软件包中的
mul
功能:

from operator import mul
然后,假设您有以下列表:

lst = [5, mul, 2]
您可以执行以下操作:

a, op, b = lst
print(op(a,b))
其中应打印:

10

.

如果我有误解,请告诉我,但我相信下面的内容可以满足您的要求:

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)

您需要展开
操作符
字典,以包含所有要动态处理的操作。有关更多操作员功能,请参阅:

如果我有误解,请告诉我,但我相信下面的内容可以满足您的要求:

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)

您需要展开
操作符
字典,以包含所有要动态处理的操作。有关更多运算符函数,请参见:

如何将列表中的
*
视为有效语法?旁白:Python玩家更喜欢使用标识符
lst
来引用列表,而不是
list
,因为
list
隐藏了python内置代码。您打算如何将列表中的
*
视为有效语法?旁白:python玩家更喜欢使用标识符
lst
来引用列表,而不是
list
,因为
list
隐藏了python内置代码。我正在尝试这个方法。(*some_list)中的“*”是什么意思?您可以使用
*
将列表解压为参数。例如,执行
somefunction(*[a,b])
与执行
somefunction(a,b)
相同,并且可以在参数完全动态时使用。有关更多信息,请参阅:我正在尝试这种方法。(*some_list)中的“*”是什么意思?您可以使用
*
将列表解压为参数。例如,执行
somefunction(*[a,b])
与执行
somefunction(a,b)
相同,并且可以在参数完全动态时使用。有关详细信息,请参阅: