2017-10-22 3 views
-2

私の仕事は、新しい要素 によって更新リストからk-置換を計算することです。リストの状態。例:n個のk-Permutationsをn個のpythonから再計算せずに生成する

liste = [1, 2, 3] 

3-順列は次のとおりです。

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

更新リスト:

liste = [1, 2, 3, 4] 

私が直接3-permutations[1, 2, 3]

計算を再計算せずに直接3-permutations[1, 2, 3, 4]-3-permutations[1, 2, 3] を取得したいと思います新しい順列:

[1, 2, 4], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 4], [2, 3, 4], [2, 4, 1], 
[2, 4, 3], [3, 1, 4], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], 
[4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2] 

おかげ

+0

リストは、1つの新しい要素を追加することによって徐々に更新されます。 – athmane88

+0

: – athmane88

+0

を[1,2,3]から[1,2,3,4]に、次に[1,2,3,4,5] ........ – athmane88

答えて

0

コンピュ最初のデカルト積{0,1 、2,3} x {0,1,2} x {0,1}リスト(1,2,3,4)のn番目の要素を取る。

r=[] 
for prd in itertools.product([[0,1,2,3],[0,1,2],[0,1]]): 
    l=[1,2,3,4] 
    r0=[] 
    for i in prd: 
     r0 += l[i] 
     del l[i] 
    r += r0 

EDIT:オリジナルの答えは、それが一般化することができる方法を見て、質問するために特別に[1,2,3,4]

次のコマンド回答の3-順列を与える

[list(j) for i in itertools.combinations([1,2,3],2) for j in itertools.permutations(list(i)+[4])] 

次の場合、おそらく1つですか?

[list(j) for i in itertools.combinations([1,2,3],2) for j in itertools.permutations(list(i)+[4,5])] 

[list(j) for i in itertools.combinations([1,2,3,4],3) for j in itertools.permutations(list(i)+[4,5])] 
+0

は、私が言及したように、それはただk-置換のためだけですか? – athmane88

+0

私は本当にあなたの提案されたソリューションに焦点を当てませんでしたが、非常に便利なようです、ありがとうございました。 – athmane88

+0

あなたの解決策の問題は、Nが増分されるたびにK値(NからのK-置換)も増分されるということです。 – athmane88

0

行い、その後、リストに既存の順列を保存してください:

if newPermutation not in listOfExistingPermutations: 
    listOfExistingPermutations.append(newPermutation) 

またはそれらの線に沿って何か

+0

あなたの答えをありがとうが、この質問の目的は、既に行われている順列の計算を繰り返すことを避け、新しい順列のみの計算に進むことです。 – athmane88

+0

私の間違いは、それが可能だと思う唯一の方法をheres - 他の方法があるかもしれません:長さnの開始番号のそれぞれの新しいセットについて、そのセットの長さL-1の組み合わせを計算し、次に各サブセットの個々の順列前のステップで使用された組み合わせ:ステップ1が[1,2,3]の順列を計算する場合、ステップ2はそれを[1,2,3,4]にし、ステップ3は[1,2,4] ]、[1,3,4]、[2,3,4]の3つの組み合わせからの各順列 – Zulfiqaar

関連する問題