阅读这个http://docs.python.org/2/library/itertools.html#itertools.product,它解释了一切。
itertools
是一个包,它具有大量用于迭代集合的有用功能。一个有用的功能是product
创建一个生成器的函数,该生成器将迭代你给它的任意数量的可迭代集合的笛卡尔积。
结果itertools.product
不是列表,而是生成器。python 生成器类似于其他语言中的协程。这意味着它将根据需要计算您的组合。如果您计算三个每个大小为 100 的可迭代对象的乘积,但您只使用前 10 个左右,itertools.product
则只会计算 10 个组合,而不是计算所有 100^3 个组合。
如果您实际上想要一个列表对象而不是生成器(也许您想要计算切片或其他东西),请调用该list
函数并将您的生成器对象作为参数传递。
以下代码生成所有组合并打印结果。
代码:
import itertools
uk_rock_stars=[1,2,3,4,5,6,7,8,9]
uk_pop_stars=[10,11,12,13,1,4,6,22,81]
us_stars=[22,34,44,7,33,99,22,77,99]
for combination in itertools.product(uk_rock_stars, uk_pop_stars, us_stars):
print combination
输出:
(1, 10, 22)
(1, 10, 34)
(1, 10, 44)
(1, 10, 7)
(1, 10, 33)
(1, 10, 99)
(1, 10, 22)
(1, 10, 77)
(1, 10, 99)
(1, 11, 22)
(1, 11, 34)
(1, 11, 44)
(1, 11, 7)
(1, 11, 33)
(1, 11, 99)
(1, 11, 22)
(1, 11, 77)
(1, 11, 99)
...
etc.