2017-02-14 4 views
1

상자가 m 개 있고 m 색으로 채색하고 싶습니다. 나는 색깔의 반복을 허용하고 싶다. 예를 들어 4 개의 박스와 2 개의 색상이 주어진다. 도 1 및 2에 의해 색을 나타내는 우리 그들 색으로 다음과 같은 방법을 예를 들어 [1,1,1,1]은 최대 제 1 색 및 제 2 색 박스로 착색 한 상자 수단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 착색 박스 2 및 4를 의미하지만이를 위해 컬러 2.

와 박스 (3)는 I 함수이다

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

로 설정하면 수를 얻을시겠습니까 'n' 박스를'm' 컬러로 채색하는 가능한 방법은 뭔가요? 그렇다면 수학 문제입니다. 가능한 모든 조합을 원하면 '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

감사합니다. –