可以尝试用itertools这个模块进行迭代,这个模块里面有很多创建迭代器的函数。
给一个思路:
第一组的元素个数最多可能有8个,取值范围为1-10。
当第一个组为1个元素的时候,第二组的元素个数最多可能为8个;
当第一个组为2个元素的时候,第二组的元素个数最多可能为7个;
以此类推,当第一个组为i个元素的时候,第二组的元素个数最可能为9-i,取值范围为1-10,并减去第一组的元素,剩余记为rem。
第三组的元素则为rem减去第二组中的元素。
itertools.combinations可以对一个集合的元素按照个数进行不同的组合,例如,从1-10中任取2个数字,可能有以下组合。
import itertools
L1 = itertools.combinations(range(1,11), 2)
print(list(L1))
[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (6, 7), (6, 8), (6, 9), (6, 10), (7, 8), (7, 9), (7, 10), (8, 9), (8, 10), (9, 10)]
所以,可以按照如下方式写代码:
import itertools
count=0
set_all=set(range(1,11))
for i in range(1,9):
for L1 in itertools.combinations(range(1,11), i):
rem=set_all-set(L1)
for j in range(1,10-i):
for L2 in itertools.combinations(rem, j):
L3=rem-set(L2)
count+=1
print(count,end=' ')
print(set(L1),set(L2),L3)