具有n个变量的迭代器的n个副本的笛卡尔积(Python)

时间:2017-10-29 14:34:50

标签: python python-2.7 product itertools

我想使用itertools.product或类似的命令来获取n个迭代器iter的副本的笛卡尔积,其中n是一个变量。我尝试通过

递归构建它
import itertools

prod_iter = iter
for i in xrange(n-1):
    prod_iter = itertools.product(prod_iter,iter)

但首先要说的是iter=xrange(2)n=3并正在运行

for i in prod_iter:
    print i

我得到了输出

((0,0),0)
((0,0),1)
((0,1),0)
...

而不是

(0,0,0)
(0,0,1)
(0,1,0)
...

正如我所愿。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

itertools.product有以下参数:repeat

所以不需要自己发明,你可以简单地写一下:

from itertools import product

for i in product(iter, repeat=3):
    print i

例如:

>>> from itertools import product
>>> 
>>> iter = "qux"
>>> 
>>> for i in product(iter, repeat=3):
...     print i
... 
('q', 'q', 'q')
('q', 'q', 'u')
('q', 'q', 'x')
('q', 'u', 'q')
('q', 'u', 'u')
('q', 'u', 'x')
('q', 'x', 'q')
('q', 'x', 'u')
('q', 'x', 'x')
('u', 'q', 'q')
('u', 'q', 'u')
('u', 'q', 'x')
('u', 'u', 'q')
('u', 'u', 'u')
('u', 'u', 'x')
('u', 'x', 'q')
('u', 'x', 'u')
('u', 'x', 'x')
('x', 'q', 'q')
('x', 'q', 'u')
('x', 'q', 'x')
('x', 'u', 'q')
('x', 'u', 'u')
('x', 'u', 'x')
('x', 'x', 'q')
('x', 'x', 'u')
('x', 'x', 'x')