itertools.product()
すべての組み合わせを生成するために使用します。
>>> from itertools import product
>>> option1 = {1, 2, 3}
>>> option2 = {4, 5}
>>> option3 = {2, 3}
>>> for tup in product(option1, option2, option3):
... print tup
...
(1, 4, 2)
(1, 4, 3)
(1, 5, 2)
(1, 5, 3)
(2, 4, 2)
(2, 4, 3)
(2, 5, 2)
(2, 5, 3)
(3, 4, 2)
(3, 4, 3)
(3, 5, 2)
(3, 5, 3)
itertools.product()
ジェネレーターです。ループがループするときに必要に応じて組み合わせを生成するfor
か、関数を使用して毎回新しい組み合わせを要求できますnext()
。これにより、itertools.product()
メモリ効率が大幅に向上します。完全に C で実装されているため、itertools.product()
非常に高速であり、リスト内包表記よりも高速です。
list()
リストを生成するには、それを呼び出します。
>>> list(product(option1, option2, option3))
[(1, 4, 2), (1, 4, 3), (1, 5, 2), (1, 5, 3), (2, 4, 2), (2, 4, 3), (2, 5, 2), (2, 5, 3), (3, 4, 2), (3, 4, 3), (3, 5, 2), (3, 5, 3)]
itertools.product
とリスト内包表記の時間比較:
>>> timeit.timeit("list(product(option1, option2, option3))", "from __main__ import option1, option2, option3, product")
1.6326439380645752
>>> timeit.timeit("[(x, y, z) for x in option1 for y in option2 for z in option3]", "from __main__ import option1, option2, option3, product")
2.2882919311523438