2017-02-14 7 views
1

私はm個の色で色付けしたいボックスがあります。私は色の繰り返しを許可したい。たとえば、4つのボックスと2つの色があります。 1及び2によって色を表す我々それらを着色するために、次の方法があり、例えば、[1,1,1,1]は、まで第一の色と第一の色付きボックス2と着色ボックス1を意味m色のn個のボックスの着色

[[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、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パッケージを使用してこれを行う方法はありますか?

+1

https://docs.python.org/2/library/itertools.html#itertools.product繰り返しでnumber_of_colors –

+0

に設定を使用すると、数を取得したいですか'm'色でn個のボックスを色付けする方法はありますか?はいの場合は、その数学の質問です。可能な組み合わせがすべて必要な場合は、 'n'と' m'の大きな値のためには不可能です –

答えて

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) 
+0

ありがとう、これは私が必要なものです –