用于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