也许这是一个简单的问题,但是我是Python的新手,还没有看到其他人发布过类似的内容。
我们有一个列表:
lst1 = ["5", "+", "1"]
或
lst2 = ["10", "/", "2"]
如何将其解释为:5 +1或10/2?我知道您可以编写:int(lst2 [0])然后得到10,但是如何用“ +”或“ /”来做同样的事情?
答案 0 :(得分:3)
如果我理解的正确,那么您可以从以下片段开始:
import operator
operators = {'+': operator.add, '-': operator.sub, '/': operator.truediv, '*': operator.mul}
first, op, second = lst
first, op, second = int(first), operators[op], int(second)
op(first, second)
operator
模块包含运算符作为函数,因此您可以将符号映射到运算符。请注意,我在truediv
中使用了/
,您可能想使用总是返回int的变量
答案 1 :(得分:3)
假设您“知道”列表中有三个字符串,第一个和最后一个代表整数,中间的一个代表一组固定的运算符,那么您只需要从运算符到实现它的函数的映射即可。例如:
import operator
ops = {"+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.div}
lst1 = ["5", "+", "1"]
f = ops[lst1[1]]
operand1 = int(lst1[0])
operand2 = int(lst1[2])
result = f(operand1, operand2)
但是,一旦开始允许更多常规输入,事情就会变得复杂,因为您需要一些逻辑来确定列表的哪些部分代表什么。为此,您需要:
可能还会有一个 tokenizer ,它会将诸如"5 + 1"
之类的单个字符串输入转换为解析器用于其输入的令牌列表。
关于如何定义上面定义的4个概念中的任何一个的一般性讨论都超出了Stack Overflow的范围。
答案 2 :(得分:1)
您无法将字符串"+"
转换为运算符+
,因为运算符不是运行时存在的东西。运算符仅存在于代码中。您可以 将字符串"+"
映射到一个带有两个参数并返回其和的函数。 operator
模块中存在大多数操作符的等效功能:
lst1 = ["5", "+", "1"]
import operator
op_table = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv
}
lhs = int(lst1[0])
op = op_table[lst1[1]]
rhs = int(lst1[2])
print('result:', op(lhs, rhs)) # output: 6
答案 3 :(得分:0)
您可以使用标准函数eval() https://www.journaldev.com/22504/python-eval-function
lst1 = ["5", "+", "1"]
result1 = eval("".join(lst1)) # 6
lst2 = ["10", "/", "2"]
result2 = eval("".join(lst2)) # 5.0