2017-11-20 4 views
-1

パーミュテーションの問題に関する問題があります。1つのアイテムを考慮するパーミュテーションが別のものに先行する必要があります

私はその後、私は次のコードを適用する場合には、(1,2,3,4,5,6)のリストを持っている:

import itertools 
a = list(itertools.permutations([1,2,3,4,5,6],6)) 

を、私は720個の順列になるだろう。代わりに、私は具体的なシーケンスを持っています: 1は5より先行しなければなりません。 2は先行する必要があります。 3は先行する必要があります。 4は8より先になければなりません。順列を生成する方法は上記のルールを考慮する?

おかげで、

答えて

0

あなたの順列を作成し、それらをフィルタリング:

import itertools 
a = list(itertools.permutations([1,2,3,4,5,6,7,8],8)) 

# your rules for filter 
def IsOk(tupl): 
    one = tupl.index(1) 
    two = tupl.index(2) 
    thr = tupl.index(3) 
    fou = tupl.index(4) 
    fiv = tupl.index(5) 
    six = tupl.index(6) 
    sev = tupl.index(7) 
    eig = tupl.index(8) 
    return one > fiv and two > six and thr > sev and fou > eig 

print(a) 

filtered = filter(lambda x: IsOk(x), a) 

print(*filtered) 
print(len(*filtered)) 

私はすべてのあなたのルールを処理できるので、8にあなたの順列を増加しなければなりませんでした。

これにより、40320から2520への順列が減少します。

関連する問題