首页 > 解决方案 > Python Decompose number 函数,接收数字和分解方法

问题描述

我正在尝试创建一个函数,用给定的数字分解一个数字:

例如要分解的数是 5,分解的方法是 1,2,5

def func(Number_to_decompose,list_with posible_ways_to_decompose)
func(5,[1,2,5])

所以函数应该返回:

[[1,1,1,1,1],[2,1,1,1],[1,2,1,1],[1,1,2,1],[1,1,1,2],[5]]

考虑到列表中的数字是相加的,所以 [1+1+1+2] 是 5!

标签: python

解决方案


尝试在列表理解中使用itertools.product不同的重复,然后在列表理解之外使用进行检查:

import itertools
def func(n,l):
   return [a for i in [itertools.product(l,repeat=x) for x in range(1,6)] for a in i if sum(a) == n]

print(func(5,[1,2,5]))

输出:

[(5,), (1, 2, 2), (2, 1, 2), (2, 2, 1), (1, 1, 1, 2), (1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 1), (1, 1, 1, 1, 1)]

如果想要列表列表:

print(list(map(list,func(5,[1,2,5]))))

输出:

[[5], [1, 2, 2], [2, 1, 2], [2, 2, 1], [1, 1, 1, 2], [1, 1, 2, 1], [1, 2, 1, 1], [2, 1, 1, 1], [1, 1, 1, 1, 1]]

推荐阅读