はじめに
リストから順列を生成する場合、標準の itertools ライブラリはスキップします要素が繰り返される組み合わせ。繰り返しを含むすべての可能な順列を取得するには、デカルト積が使用されます。
Itertools Permutations
itertools の permutations() 関数は、繰り返しのない順列を生成します。サイコロの出目の場合、両方のサイコロに同じ数字が現れる (1, 1) のような組み合わせは除外されます。
デカルト積
間のデカルト積2 つのセットは、最初の要素が最初のセットに由来し、2 番目の要素が 2 番目のセットに由来する、すべての順序付きペアを含む新しいセットを作成します。たとえば、{1, 2} と {3, 4} のデカルト積は、{(1, 3), (1, 4), (2, 3), (2, 4)} となります。
サイコロのロールにデカルト積を適用する
すべての可能なサイコロのロールの組み合わせを繰り返し生成するには、デカルト積:
import itertools x = [1, 2, 3, 4, 5, 6] dice_combinations = [p for p in itertools.product(x, repeat=2)]
結果の例
出力は、(1, 1):
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
ランダムダイスロール
ランダムなサイコロの出目は、デカルト積リストからペアを選択することで取得できます:以上がデカルト積はどのようにして繰り返しによる順列を生成できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。