2017-02-14 7 views
1

Ich habe n Kästchen Ich möchte sie mit m Farben färben. Ich möchte die Wiederholung von Farben ermöglichen. Zum Beispiel gegeben 4 Boxen und zwei Farben. Bezeichnet man die Farben von 1 und 2 haben wir folgende Möglichkeiten, um sie zu färbenMalen n Kästchen mit m Farben

[[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]] 

wo zum Beispiel [1,1,1,1] Färbung Box 1 mit erster Farbe und Box 2 mit dem ersten Farbe auf die oben bedeutet, letzte Box. Während [1, 1, 2, 1] färbenden Kästen 1,2 und 4 mit Farbe 1 während Kasten 3 mit Farbe 2.

Zu diesem Zweck bedeutet I definiert die folgende Funktion

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 

Die Funktion ist arbeiten, aber ich hätte gerne einen effizienteren Weg, dies zu tun. Gibt es eine Möglichkeit, dies mit dem Paket itertools zu tun?

+1

https://docs.python.org/2/library/itertools.html#itertools.product mit Wiederholung auf number_of_colors gesetzt –

+0

Haben Sie die Anzahl der zu wollen mögliche Möglichkeiten, 'n' Boxen mit' m' Farben zu färben? Wenn ja, dann ist es eine mathematische Frage. Wenn Sie alle mögliche Kombination wollen, dann ist es nicht möglich für größere Werte von "n" und "m" –

Antwort

2

Sie meinen wie itertools.product?

import itertools 

colours = (1, 2) 

for x in itertools.product(colours, repeat=4): 
    print(x) 

druckt:

(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

Danke das ist was ich brauchte –

Verwandte Themen