Я не знаю, является ли мой код самым элегантным, но мне пришлось много раз его решать в исследовательских целях. Если вы измените переменную
sub_nums
, вы можете ограничить, какие числа используются в разделе.
def make_partitions(number):
out = []
tmp = []
sub_nums = range(1,number+1)
for num in sub_nums:
if num<=number:
tmp.append([num])
for elm in tmp:
sum_elm = sum(elm)
if sum_elm == number:
out.append(elm)
else:
for num in sub_nums:
if sum_elm + num <= number:
L = [i for i in elm]
L.append(num)
tmp.append(L)
return out