我有n个盒子,我想用米色为它们着色。我想允许重复颜色。例如给出4个盒子和两种颜色。将颜色表示为1和2,我们有以下方法为它们着色
[[1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 2, 1], [1, 1, 2, 2], [1, 2, 1, 1],
[1, 2, 1, 2], [1, 2, 2, 1], [1, 2, 2, 2], [2, 1, 1, 1], [2, 1, 1, 2],
[2, 1, 2, 1], [2, 1, 2, 2], [2, 2, 1, 1], [2, 2, 1, 2], [2, 2, 2, 1],
[2, 2, 2, 2]]
其中例如[1,1,1,1]表示带有第一种颜色的着色框1,带有第一种颜色的框2表示最后一个框。虽然[1,1,2,1]表示带有颜色1的着色盒1,2和4,而带有颜色2的盒子3。
为此,我定义了以下功能
def recursive_fun(number_of_boxes,number_of_colors):
possible_colors=range(1,number_of_colors+1)
if number_of_boxes==1:
return [[i] for i in possible_colors]
else:
output=[]
y=recursive_fun(number_of_boxes-1,number_of_colors)
for i in y:
for m in possible_colors:
output.append(i+[m])
return output
该功能正在运行,但我希望有一种更有效的方法。有没有办法使用itertools包来做到这一点?
答案 0 :(得分:2)
你的意思是itertools.product
?
import itertools
colours = (1, 2)
for x in itertools.product(colours, repeat=4):
print(x)
打印:
(1, 1, 1, 1)
(1, 1, 1, 2)
(1, 1, 2, 1)
(1, 1, 2, 2)
(1, 2, 1, 1)
(1, 2, 1, 2)
(1, 2, 2, 1)
(1, 2, 2, 2)
(2, 1, 1, 1)
(2, 1, 1, 2)
(2, 1, 2, 1)
(2, 1, 2, 2)
(2, 2, 1, 1)
(2, 2, 1, 2)
(2, 2, 2, 1)
(2, 2, 2, 2)