问题来源:《有意思的面试题-数独问题》
我在《多个数组,每个数组中选择一项,总共能有多少种组合,treelib实现》中写了通过treelib实现的方式,但我发现这个方式内存消耗量极大,有的时候内存使用量达到30G,reduce
对内存的使用也很大,但性能上胜出,所以这次使用reduce
搞一把。
废话不多说了,看代码:
import numpy as np
import sys
def combination(lists):
if sys.version_info < (3, 0):
import reduce
else:
from functools import reduce
def reduceFun(list1, list2):
array = []
for i in list1:
for j in list2:
array.append(np.hstack((i, j)))
return array
return reduce(reduceFun, lists)
#lists = [[6, 8], [2, 5], [1, 9], [3, 9], [3, 5], [3, 9], [8, 9], [3, 6], [2, 9], [2, 3, 8], [2, 3, 6], [2, 5, 8], [1, 5, 8], [1, 6, 9], [5, 6, 9], [1, 3, 5], [3, 5, 6], [3, 8, 9]]
lists = [[1, 2, 3], [4,<