0

ケース: オブジェクトの 3 つの組み合わせがルールを満たすかどうかを調べる必要があります。

簡単にするために、指定されたシーケンスがジェネレーター関数によって吐き出されるアイテムの任意の組み合わせにある場合、ルールが満たされるとしましょう。ジェネレーターは、各インスタンスでプールからどのアイテムがポップアウトされるかを処理し、常に同じアイテム/順序を生成するとは限らないため、アイテムのリストを構築し、itertools.combinations組み合わせを生成するようなものを使用しても機能しません。

現在、次と同等の関数があります。

def is_match_found(sequence):

  items1 = items_generator()

  for item1 in items1:
    items2 = items_generator()

    for item2 in items2:
      items3 = items_generator()

      for item3 in items3:
        if sequence in [item1, item2, item3]:
          return True

  return False

nしかし、ジェネレーターによって吐き出されるオブジェクトの組み合わせがルールを満たすかどうかを確認する必要がある未来を予見しています。

n再帰ループを実装するパラメーターを持つ関数は、この問題を解決するための一歩かもしれないと感じていますforが、効果的なループを正そうとすると頭が壊れます。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

N 個の項目の順列の場合:

def is_match_found(sequence):
    for itemList in itertools.product(list(item_generator()), repeat=N):
        if sequence in itemList:
            return True
    return False
于 2013-08-01T23:00:51.280 に答える
0

n「再帰ループを実装するパラメーターを持つ関数」を探していて、for「再帰的」とは実際には「ネストされた」ことを意味する場合…それはすでに存在します: itertools.product. 実際、簡単な説明は次のとおりです。

ネストされた for ループに相当するデカルト積

nただし、パラメーターはありません。これにはiterablesパラメーターがあり、ネストする個別のイテラブルをいくつでも指定できます。同じ iterable の回数をネストしたいだけなら、同じ iterableのコピーのnリストを渡すことができますが、キーワードを使用してそれを指定することもできます。ドキュメントが言うように:nrepeat

product(A, repeat=4)と同じ意味product(A, A, A, A)です。

于 2013-08-01T23:01:56.077 に答える