python - 在变量列表上尝试所有操作组合

标签 python combinations

我有一个值列表,例如:

values = [1, 2, 3, 4]

我想尝试此列表中的所有组合,例如:

1 + 2
1 + 3
1 + 4
1 * 2
1 * 3
1 * 4
1 + 2 * 3
1 + 2 * 4
1 + 3 * 4

等等

以最简洁的方式获得所有这些可能的操作组合的最直接方法是什么?

我会想象有两个列表,[1,2,3,4] 和 [+, *, -,/] 然后采用所有长度的数字的所有组合,然后用所有组合填充空白.

所以选择 [1, 2, 3] 然后选择操作的所有排列并将它们组合在一起。这看起来很乱,我希望有更清晰的编码方式?

最佳答案

这是一个递归解决方案,它从数字和运算符构建表达式,然后使用 eval计算它:

vals = [1, 2, 3]
operators = ['+', '*', '-', '/']

def expressions(values):
    # Base case, only one value left
    if len(values) == 1:
        yield values

    # Iterate over the indexes
    for i in range(len(values)):
        # Pop value from given index and store the remaining values
        # to be used with next recursion
        forward = values[:]
        val = forward.pop(i)

        # Yield all value, operator, subexpression combinations
        for op in operators:
            for rest in expressions(forward):
                yield [val, op] + rest

for expr in expressions(vals):
    expr = ' '.join(str(x) for x in expr)
    print('{} = {}'.format(expr, eval(expr)))

输出(部分):

1 + 2 + 3 = 6
1 + 2 * 3 = 7
1 + 2 - 3 = 0
1 + 2 / 3 = 1.6666666666666665
1 + 3 + 2 = 6
1 + 3 * 2 = 7
1 + 3 - 2 = 2
1 + 3 / 2 = 2.5
1 * 2 + 3 = 5
1 * 2 * 3 = 6
1 * 2 - 3 = -1
1 * 2 / 3 = 0.6666666666666666
1 * 3 + 2 = 5
1 * 3 * 2 = 6
1 * 3 - 2 = 1
1 * 3 / 2 = 1.5
1 - 2 + 3 = 2
1 - 2 * 3 = -5
1 - 2 - 3 = -4

关于python - 在变量列表上尝试所有操作组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39525993/

相关文章:

python - 如何使用 python 以编程方式创建 Google 表单?是否可以通过应用程序脚本和 python 接口(interface)或类似的东西来做到这一点?

python - 比较两个文本列表,检查是否重复并将其标记为行尾

python - OpenCv 不接受函数中的多个绘制指令(在 Python 中)

python - 如何按列优先顺序显示数字序列?

python - 组合太多

python - 如何从 python 中的同一列表中获取不同长度的多种组合?

python - 对 python 列表进行切片

algorithm - 深度优先组合算法

algorithm - 计算一组矩阵上 for 循环的复杂性

c# - 连接结果集