【问题标题】:Cartesian product of n copies of an iterator with n variable (Python)具有 n 个变量的迭代器的 n 个副本的笛卡尔积(Python)
【发布时间】:2017-10-29 14:34:50
【问题描述】:

我想使用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)
...

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

【问题讨论】:

    标签: python python-2.7 product itertools


    【解决方案1】:

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-31
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2011-03-24
      • 2020-10-06
      相关资源
      最近更新 更多