2017-01-04 4 views
1

Ich möchte die Lösung mit einer bestimmten Reihenfolge aufzählen. Derzeit mit dem folgenden Code:Aufzählung von Kugeln in Korb mit einer bestimmten Reihenfolge

def balls_in_baskets(balls=1, baskets=1): 
    if baskets == 1: 
     yield [balls] 
    elif balls == 0: 
     yield [0]*baskets 
    else: 
     for i in range(balls+1): 
      for j in balls_in_baskets(balls-i, 1): 
       for k in balls_in_baskets(i, baskets-1): 
        yield j+k 

x=[t for t in balls_in_baskets(3,3)][::-1] 
for i in x: 
    print(i) 

ich diese:

[0, 0, 3] 
[0, 1, 2] 
[0, 2, 1] 
[0, 3, 0] 
[1, 0, 2] 
[1, 1, 1] 
[1, 2, 0] 
[2, 0, 1] 
[2, 1, 0] 
[3, 0, 0] 

Allerdings würde ich diesen Auftrag mag:

[0, 0, 3] 
[0, 1, 2] 
[1, 0, 2] 
[0, 2, 1] 
[1, 1, 1] 
[2, 0, 1] 
[0, 3, 0] 
[1, 2, 0] 
[2, 1, 0] 
[3, 0, 0] 

Wie kann ich diese richtige Reihenfolge erreichen?

Antwort

1

Sie haben bereits die Speichereffizienz Ihres Generators verlieren, indem sie in einer Liste Verständnis, so dass Sie könnte auch sort das Ergebnis raubend:

x = sorted(balls_in_baskets(3,3), key=lambda x: x[::-1], reverse=True) 

die dann druckt die erwartete Ausgabe:

[0, 0, 3] 
[0, 1, 2] 
[1, 0, 2] 
[0, 2, 1] 
[1, 1, 1] 
[2, 0, 1] 
[0, 3, 0] 
[1, 2, 0] 
[2, 1, 0] 
[3, 0, 0] 
Verwandte Themen