2016-08-26 16 views
0

、01243、01324などのように、各数字が5桁の数字の範囲内で何回出現するかを調べることに興味があります。 私は出現が120回のユニークな時間 現在、私は多くのforループとたくさんのandsでプログラムしています。 あなたがコード内で見ることができるよう数字の範囲内で一意の出現数

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

が異なると、上記のコードをプログラムするよりよい方法はありますか?

挨拶し、

Superflyの

+1

を追加することができ、あなたは順列または順列自身の数をお探しですか?番号はちょうどnです! (n教員)では、この順列はhttps://docs.python.org/3.5/library/itertools.htmlで生成できます – Jasper

答えて

0

は誰かがitertoolsを使用して提案しました。

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

をあなたは1行にすべてを置くために、リストの内包表記を使用することができ、itertoolsを使用して好きではないだろうが、すべての文字列を生成したい場合:ここで使用するコードです。

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] 

また、あなたが再帰的に新しいリストを作成する方法を定義し、アイテム

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) 
関連する問題