这种方法相当于每次从数组里取一个元素和result里的所有列表元素相加,列表元素里长度大于等于n的(挑选出n个数的组合)就没有和元素相加的意义了,用不到。长度小于n的都会被用到,最后对result里的元素过滤一下,只保留长度是n的。
def combination_add(num_list,n):
result = [[]]
for i in num_list:
result.extend([[i]+x for x in result if len(x)<n])
result = filter(lambda l:len(l)==n,result)
print result