2016-08-26 4 views
0

Ich bin daran interessiert herauszufinden, wie oft jede Zahl einmal in einem Nummernbereich von 5 Ziffern, wie, 01243, 01324, etc .... Ich weiß, dass das Vorkommen ist 120 einzigartige Zeiten Im Moment habe ich es mit vielen for-Schleifen und eine Menge ands programmiert. wie können Sie im Code seheneindeutige Nummer des Vorkommens in einem Zahlenbereich

number = 5 
for a in range(number): 
    for b in range(number): 
     for c in range(number): 
      for d in range(number): 
       for e in range(number): 
        if (a != b and a != c and a != d and a != e and 
          b != c and b != d and b != e and c != d and 
          c != e and d != e): 
         print ('{}{}{}{}{}'.format(a, b, c, d, e)) 

Gibt es eine andere und ein schöner Weg, um den Code oben zu programmieren?

Greets,

Superfly

+1

anhängen Suchen Sie die Anzahl der Permutationen oder Permutationen selbst suchen? Die Nummer ist nur n! (n Fakultät), die Permutationen können mit https://docs.python.org/3.5/library/itertools.html generiert werden – Jasper

Antwort

0

Jemand schlug vor, itertools verwenden. Hier ist der Code zu verwenden:

from itertools import permutations 
#generator 
factorials = permutations(set(range(5))) 
for fact in factorials: 
    print(fact) 

Wenn Sie nicht itertools möchten, verwenden möchte aber jede Zeichenfolge generieren, können Sie eine Liste Verständnis verwenden, um sie alle in einer Zeile.

rn = range(number) 
number= 5 

sequences = [(a,b,c,d,e) for a in rn for b in rn for c in rn for d in rn for e in rn if a != b and a!= c and a!= d and a!= e and b!= c and b!=d and b!=e and c!=d and c!= e and d!= e] 

Alternativ könnten Sie eine Methode definieren rekursiv auf neue Listen erstellen und Artikel

def rGenFactorials(L, leng=5, collected = [], restrictions=set()): 

    # base case 
    if len(L) == leng: 
     collected.append(L) 
     return 

    #induction 
    options = set(range(leng)) 
    options -= restrictions 

    for op in options: 

     # copy restrictions 
     r = set(restrictions) 
     # add new restriction 
     r.add(op) 

     # copy list 
     l = L[:] 
     # append unused int 
     l.append(op) 

     # recursive invocation 
     rGenFactorials(L=l,collected = collected, restrictions=r) 


C = [] 
rGenFactorials([], collected = C) 
for c in C: 
    print(c) 
Verwandte Themen