ホーム>source

itertoolsモジュールを使用して、 "O" のn要素シーケンスの順列の総数を見つける必要があります sおよび "X" s。 (nは既知の定数ですが、n = 8の場合は答えてください)。たとえば、3と入力すると、次のように出力されます。

<前>ウィズウィズ

必ずしもその順序ではありません。私は現在、これを行うためにitertoolsとその組み合わせ/順列/ combinations_with_replacement関数を使用していますが、同じである複数の要素を持つ配列を与えた場合、それらが同じであることを理解できないようです。組み合わせを見つけるために、私は素晴らしいです、私は現在ただ行うことができます:

ウィズウィズ

出力する

<前>ウィズウィズ

ただし、順列関数を使用すると、等しい要素が区別され、2 ^ 8 = 256の出力しかないはずの8つの階乗の9 = 40320の9つの出力タプルが生成されます。誰か助けてくれますか?

ありがとう!

OOO OOX OXO XOO OXX XXO XOX XXX
あなたの答え
  • 解決した方法 # 1

    あなたは itertools.product を使うことができます   repeat  必要な出力を取得するパラメーター:

    <前>ウィズウィズ

    与える:

    <前>ウィズウィズ

    for xos in itertools.product('OX', repeat=3): print(xos) の場合 、256個の結果が得られます。

    <前>ウィズウィズ

  • 解決した方法 # 2

    あなたは ('O', 'O', 'O') ('O', 'O', 'X') ('O', 'X', 'O') ('O', 'X', 'X') ('X', 'O', 'O') ('X', 'O', 'X') ('X', 'X', 'O') ('X', 'X', 'X') を使うべきです  代わりに:

    ウィズウィズ
    
    repeat=8

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ c# - XDocument保存後のXMLファイルの余分な文字