两个列表中所有组件的所有排列

问题描述 投票:0回答:1
operators = ['+', '-', 'x']
numbers = [4,5,6,9]

如何从两个列表创建可能公式的所有可能排列的列表?

即4+5-6x9、4-5+6x9、...、9-4+5x6...

每个公式不能重复。尝试了各种 itertool 但还没有弄清楚这个。

python permutation
1个回答
0
投票

itertools
中没有一个函数可以做到这一点。你需要分别计算运算符和数字的排列,然后需要得到两组排列的笛卡尔积:

from itertools import permutations, product
operators = ['+', '-', 'x']
numbers = [4,5,6,9]

all_expressions = set()

for nums, ops in product(permutations(numbers), permutations(operators)):
    expr = "".join(f"{n}{o}" for n, o in zip(nums, ops)) + str(nums[-1])
    all_expressions.add(expr)

all_expressions
创建为一组可以为您处理重复项。正如预期的那样,这给出了一个包含 144 个元素的集合:

{'4+5-6x9',
 '4+5-9x6',
 '4+5x6-9',
 '4+5x9-6',
 '4+6-5x9',
 ...
 '9x5-6+4',
 '9x6+4-5',
 '9x6+5-4',
 '9x6-4+5',
 '9x6-5+4'}
© www.soinside.com 2019 - 2024. All rights reserved.