具有 n 个变量的迭代器的 n 个副本的笛卡尔积 (Python)
Cartesian product of n copies of an iterator with n variable (Python)
我想使用 itertools.product
或类似的命令来获得迭代器 iter
的 n
个副本与自身的笛卡尔积,其中 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)
...
如我所愿。有办法吗?
itertools.product
有这样的参数:repeat
.
所以不用自己发明,直接写就可以了:
from itertools import product
for i in product(iter<b>, repeat=3</b>):
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')
我想使用 itertools.product
或类似的命令来获得迭代器 iter
的 n
个副本与自身的笛卡尔积,其中 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)
...
如我所愿。有办法吗?
itertools.product
有这样的参数:repeat
.
所以不用自己发明,直接写就可以了:
from itertools import product
for i in product(iter<b>, repeat=3</b>):
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')