步骤1:给定一个数字列表,仅给出所需组的最终数量,生成所有可能的分组(按顺序).
例如,如果我的数字列表是1到4,并且我想要2个最终组,则可能性为:
[1], [2,3,4]
[1,2], [3,4]
[1,2,3], [4]
Run Code Online (Sandbox Code Playgroud)
第2步:对这些组执行算术运算.
例如,如果我们选择添加,最终结果将是:
1 + 234 = 235
12 + 34 = 46
123 + 4 = 127
Run Code Online (Sandbox Code Playgroud)
先前的研究和类似的问题
我已经在SO和其他地方看到了很多关于涉及可变数量的组的问题的例子,它们使用范围和for循环,a la:
print [num_list[i:i+groups] for i in range(0,len(num_list),groups)]
Run Code Online (Sandbox Code Playgroud)
但这与我想要的相反 - 在那里,除了最后一组之外,组本身的长度是固定的,并且组的数量是振荡的.
这不是家庭作业,只是我遇到的一个有趣的问题.理想情况下,我需要能够迭代这些单独的子列表以执行数学运算,因此它们也需要被捕获.
我有一种感觉,解决方案将涉及itertools,但我似乎无法弄清楚组合方面的组合.
编辑/扩展第2步
如果我想在每个分区上执行不同的操作,我仍然可以采用相同的方法吗?而不是仅仅指定int.添加,我能以某种方式执行所有主要4个操作的另一个组合吗?即:
symbol_list = ['+','-','*','/']
for op in symbol_list:
#something
Run Code Online (Sandbox Code Playgroud)
我最终会有以下可能性:
1 + 2 * 34
1 * 2 - 34
1 / 2 + 34
etc.
Run Code Online (Sandbox Code Playgroud)
操作顺序可以忽略.
#!/usr/bin/env …Run Code Online (Sandbox Code Playgroud)