1

リストがL=[1,2,3,3,4]あり、長さ3のすべての順列を再帰的に検索したいとします。

私はすべての一意の順列を返そうとしています。つまり、に2つのが含まれているため、のようなものが[1,2,3]2回出力に含まれていません。3L

itertools.permutationsには重複が含まれているため、また、必要なときにいつでも反復を終了できるようにしたいので、順列を順番に反復しようとしています(最下位から[1,2,3]最大まで反復)。[4,3,3]

きちんと説明していなくてごめんなさい。

編集:私はおそらくもう一度詳しく説明する必要があります。実際には、コードが最後まで実行された場合でも、可能なすべての順列を実際に生成したくはありません(多すぎる可能性があります)。必要に応じて早期に保釈できるように、特定の順序ですべての順列を反復処理しようとしています。

4

1 に答える 1

3

これはどう:

l = [1,2,3,3,4]

print sorted(set(itertools.permutations(l,3)))

出力:

[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), ..., (4, 3, 3)]

これにより、順序が維持され、重複が削除されます。


考えられる各順列を事前に生成することを避けたい場合は、次のようにします。

gen = itertools.permutations(l,3)
s = set()

for i in gen:
    if i not in s:
        print i  # or do anything else
    # if some_cond: break
    s.add(i)

genこれがジェネレーターであるため、使用する可能性のあるすべての要素を事前に作成しているわけではありません。

于 2012-11-15T23:47:22.380 に答える