結果を自動的にまとめて (内部) ループによって生成された各結果を生成するリストのリストをループする関数を探していました。Python の標準ライブラリから認識できる候補が見当たらなかったので、loop
以下の関数が結果でした。同様のことを行う、またはの代わりに使用できるはるかに優れた方法で記述されている利用可能な関数を知っている人はいますloop
か? 以下に示すコードの使用例では、yield された反復の順序は重要ではありませんが、他のプロジェクトで一般的に使用する場合は、yield がリストに入る順序で出てくるのがおそらく最善でしょう。
from itertools import permutations
GROUPS = ('he', 'she'), ('man', 'woman'), ('male', 'female'), ('adam', 'eve')
def main():
for size in range(2, len(GROUPS) + 1):
for groups in permutations(GROUPS, size):
for items in loop(*groups):
print(''.join(items).capitalize())
def loop(*args):
head, tail = args[0], args[1:]
if tail:
for a in head:
for b in loop(*tail):
yield [a] + b
else:
for a in head:
yield [a]
if __name__ == '__main__':
main()