如何在Python中将'+'转换为+

时间:2021-02-26 12:19:59

标签: python list types

我愿意编写一个程序,对一组长度为 6 的正整数(例如:[1, 6, 3, 9, 2, 9]).

为此,我正在使用列表

symbols = ['+', '-', '*', '/']

并编写了一个嵌套循环来创建所有可能性

+ + + + +
+ + + + -
.
.
.
/ / / / *
/ / / / /

通过调用每一行(例如:+ - + * / )一个主题,以及 M 中所有主题的集合

M[0] = ['+', '+', '+', '+', '+']
M[1] = ['+', '+', '+', '+', '-']

等等。我现在的目标是写一个函数

evaluate_expression(motif, a, b, c, d, e, f)

吐出表达式的结果 a 主题[0] b 主题[1] c 主题[2] d 主题[3] e 主题[4] f

我的想法是尝试将 '+' 转换为符号 + 但我找不到办法做到这一点,我希望你们中的一些人知道如何做到这一点,我愿意接受任何建议修改以使其更干净。

4 个答案:

答案 0 :(得分:4)

operator 库为您提供基本运算符的函数(例如 add()sub()

因此,您可以将 symbols = ['+', '-', '*', '/'] 替换为:

from operator import add, sub, mul, truediv
symbols = [add, sub, mul, truediv]

现在你的motif生成函数应该是函数列表而不是字符串列表。

然后,假设您有一个 motif 列表,如您所称(查看 itertools.combinations_with_replacement() 以获取生成所有图案的函数),您可以通过执行以下操作来应用它:

motif = [add, add, sub]
values = [5, 6, 7, 8]
 
result = values[0]
for i, current_func in enumerate(motif):
    result = current_func(result, value[i+1])

print(result)

注意:此方法遵守操作顺序,它将按顺序应用函数,从左到右。

答案 1 :(得分:2)

使用函数指针字典似乎是您想要使用的。

from operator import add, sub, mul, truediv

operators = {
    '+': add,
    '-': sub,
    '*': mul,
    '/': truediv
}


def op(operator, a, b):
    return operators[operator](a, b)


print(op('+', 1, 2))
print(op('-', 1, 2))

总的来说,它可能是这样的:

from operator import add, sub, mul, truediv

operators = {
    '+': add,
    '-': sub,
    '*': mul,
    '/': truediv
}


def op(operator_list, param_list):
    assert len(operator_list)+1 == len(param_list)
    assert len(param_list) > 0
    res = param_list[0]
    for i in range(len(operator_list)):
        res = operators[operator_list[i]](res, param_list[i])
    return res


print(op(['+', '-'], [1, 2, 4]))

答案 2 :(得分:-1)

您可以使用 eval("...") 执行字符串。

def evaluate_expression(operands, operators):
    assert len(operands)==len(operators)+1
    expression = str(operands[0])
    for idx, operator in enumerate(operators):
        expression += str(operator)+str(operands[idx+1])
    return eval(expression)

可以像这样调用函数evaluate_expression([1,2,3,4,5],["+","-","+","-"]),并计算 1+2-3+4-5 = -1

答案 3 :(得分:-1)

我认为没有直接的方法可以将字符串类型转换为运算符(至少在核心 python 库中),但您可以做的是将整个表达式创建为字符串并在传递时运行 eval()

opnd = [1, 6, 3, 9, 2]
oprt = ['+', '-', '*', '/']

def string_eval(operands,operators):
    final_string = ""
    for i in range(len(operands)):
        final_string += str(operands[i])
        if i < len(operators):
            final_string += str(operators[i])
    return eval(final_string)

print(string_eval(opnd,oprt))

输出-6.5