2024-03-29 05:08:02 发布
网友
假设我有一个简单的列表lis = [5, *, 2]
lis = [5, *, 2]
有没有可能沿着以下路线做一些事情:
print(reduce(lambda x,y,z: float(x) y float(z), lis)) 10
我想用列表中给出的字符串来确定操作数。你知道吗
首先,不能将*运算符放在列表中,因为它在Python中不是值。相反,您可以使用mul包中的operator函数:
*
mul
operator
from operator import mul
然后,假设您有以下列表:
lst = [5, mul, 2]
您可以执行以下操作:
a, op, b = lst print(op(a,b))
应打印:
10
是的。你知道吗
在Python中不能传递运算符reduce(+, [1,2,3])会给您一个SyntaxError。类似地,列表中间的操作符也会。你知道吗
reduce(+, [1,2,3])
SyntaxError
如果希望使用字符串查找运算符,可以使用operator模块构造字典。你知道吗
SYMBOL_TO_OPERATOR = {"*": operator.mul, "+": operator.add, ...}
这些只是普通的方法,尽管你不能像使用符号一样使用“中缀”符号。你知道吗
此外,作为reduce操作,这没有多大意义(这也不是非常惯用的python)。您可以轻松地执行以下操作:
reduce
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
operators
首先,不能将
*
运算符放在列表中,因为它在Python中不是值。相反,您可以使用mul
包中的operator
函数:然后,假设您有以下列表:
您可以执行以下操作:
应打印:
是的。你知道吗
在Python中不能传递运算符
reduce(+, [1,2,3])
会给您一个SyntaxError
。类似地,列表中间的操作符也会。你知道吗如果希望使用字符串查找运算符,可以使用
operator
模块构造字典。你知道吗这些只是普通的方法,尽管你不能像使用符号一样使用“中缀”符号。你知道吗
此外,作为
reduce
操作,这没有多大意义(这也不是非常惯用的python)。您可以轻松地执行以下操作:如果我有误解,请告诉我,但我相信下面这样的事情可以满足您的要求:
您需要在
operators
字典上展开,以包含要动态处理的所有操作。有关更多运算符函数,请参见:https://docs.python.org/2/library/operator.html相关问题 更多 >
编程相关推荐