如何基于运算符与数字列表生成无重复元素的所有公式排列?
解决方案
要生成所有符合要求的公式,核心是分别生成数字的全排列和运算符的全排列,再将两者交替拼接即可。Python的itertools.permutations正好能满足不重复元素的排列需求,因为它会返回所有元素的无重复排列组合。
具体实现代码
import itertools operators = ['+', '-', 'x'] numbers = [4,5,6,9] # 生成所有数字的全排列(4个数字不重复) num_perms = itertools.permutations(numbers) # 生成所有运算符的全排列(3个运算符不重复) op_perms = itertools.permutations(operators) # 拼接所有可能的公式 formulas = [] for nums in num_perms: for ops in op_perms: # 交替拼接数字和运算符:num1 op1 num2 op2 num3 op3 num4 formula_parts = [] for n, o in zip(nums[:-1], ops): formula_parts.append(str(n)) formula_parts.append(o) formula_parts.append(str(nums[-1])) formula = ''.join(formula_parts) formulas.append(formula) # 打印部分结果验证 for f in formulas[:5]: print(f)
代码说明
itertools.permutations(numbers):生成4个数字的所有不重复排列,比如(4,5,6,9)、(4,5,9,6)、(9,4,5,6)等,共4! = 24种。itertools.permutations(operators):生成3个运算符的所有不重复排列,比如('+','-','x')、('-','+','x')等,共3! = 6种。- 拼接逻辑:把每个数字排列的前3个数字分别和运算符排列的3个运算符配对,最后加上第4个数字,形成完整的公式字符串。
- 最终总共有
24 * 6 = 144种不同的公式,完全覆盖你需要的所有组合。
示例输出
运行代码后,前5个结果类似:
4+5-6x9 4+5x6-9 4-5+6x9 4-5x6+9 4x5+6-9
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

