http://docs.python.org/2/library/itertools.html#itertools.productによると、次の関数はライブラリを使用することと同等です (必要のないものをいくつか削除しました)。
def product(*args):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
pools = map(tuple, args)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
私の場合、製品関数 3 リストを渡していますが、いくつかの条件チェックを追加する必要があるため、要件を満たさない場合に、あるリストの特定のアイテムと別のリストのアイテムが混在しないようにします。だから私がする必要があると思ったのは、変換することです:
result = [x+[y] for x in result for y in pool]
「通常の」FOR ループ (それらを参照する方法がわからない) に変換するため、いくつかの IF チェックを追加して、リスト内の項目を混在させる必要があるかどうかを確認できます。
主に私を混乱させるのは、「x」が空の「結果」リストを反復しているということですが、反復すると項目が追加されるため、これが通常のループへの変換を複雑にしていると思います。
これが私の試みの1つです:
def product(*args):
pools = map(tuple, args)
result = [[]]
for pool in pools:
for x in result:
for y in pool:
result.append(x+[y])
for prod in result:
yield tuple(prod)
どんな助けでも大歓迎です!