重複の可能性:
Python でリストのすべての順列を生成する方法
私はリスト[1,2,3]
を与えられ、タスクはこのリストの可能な順列をすべて作成することです。
期待される出力:
[[1, 2, 3], [1, 3, 2], [2, 3, 1], [2, 1, 3], [3, 1, 2], [3, 2, 1]]
どこから始めればいいのかさえ考えられません。誰でも助けることができますか?
ありがとう
重複の可能性:
Python でリストのすべての順列を生成する方法
私はリスト[1,2,3]
を与えられ、タスクはこのリストの可能な順列をすべて作成することです。
期待される出力:
[[1, 2, 3], [1, 3, 2], [2, 3, 1], [2, 1, 3], [3, 1, 2], [3, 2, 1]]
どこから始めればいいのかさえ考えられません。誰でも助けることができますか?
ありがとう
itertools.permutationsがこれを行います。
それ以外の場合、再帰的に順列を見つける単純な方法があります。出力の最初の要素を連続して選択し、残りの要素のすべての順列を見つけるように関数に依頼します。
https://stackoverflow.com/a/104436/42973で、わずかに異なるが同様の解決策を見つけることができます。残りの (最初ではない) 要素の順列をすべて見つけてから、可能なすべての場所に最初の要素を連続して挿入します。
これは基本的な解決策です...アイデアは、再帰を使用してすべての順列を調べ、無効な順列を拒否することです。
def perm(list_to_perm,perm_l,items,out):
if len(perm_l) == items:
out +=[perm_l]
else:
for i in list_to_perm:
if i not in perm_l:
perm(list_to_perm,perm_l +[i],items,out)
a = [1,2,3]
out = []
perm(a,[],len(a),out)
print out
出力:
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]