ホームページ >バックエンド開発 >Python チュートリアル >マルチセットの一意の順列を効率的に生成するにはどうすればよいですか?
一意の順列のカウント
Itertools の順列関数は、要素を値ではなく位置によって一意であるものとして扱います。その結果、次の例のように重複が発生する可能性があります: [(1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1 、1, 1)、(1, 1, 1)].
を避ける重複
元のリクエストは、多数の順列が含まれるため、事後フィルタリングに頼ることなくこれらの重複を回避するアルゴリズムを求めていました。
sympy のマルチセット順列
そのような場合のために、sympy は multiset_permutations を提供しますイテレータ。順列とは異なり、この反復子は要素を位置ではなく値に基づいて一意なものとして扱います。
次の例を考えてみましょう:
>>> from sympy.utilities.iterables import multiset_permutations >>> list(multiset_permutations([1,1,1])) [[1, 1, 1]] >>> list(multiset_permutations([1,1,2])) [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
ご覧のとおり、multiset_permutations は一意の順列のみを生成します。
以上がマルチセットの一意の順列を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。