operators = ['+', '-', 'x']
numbers = [4,5,6,9]
如何从两个列表创建可能公式的所有可能排列的列表?
即4+5-6x9、4-5+6x9、...、9-4+5x6...
每个公式不能重复。尝试了各种 itertool 但还没有弄清楚这个。
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'}