itertools.product的python输入

时间:2010-06-11 06:41:29

标签: python

寻找一种模拟嵌套循环(或笛卡尔积)的方法,我遇到了itertools.product函数。 我需要一个函数或一段代码,它接收一个整数列表作为输入并返回一个特定的生成器。

例如:
输入= [3,2,4] - > gen = product(xrange(3),xrange(2),xrange(4))

输入= [2,4,5,6] - > gen = product(xrange(2),xrange(4),xrange(5),xrange(6))

随着列表大小的变化我在如何做到这一点时非常困惑,而不需要根据疯狂的ifs数量和列表大小进行大量预编码。

呼叫产品(范围(3))或产品(xrange(3))也有区别吗?

2 个答案:

答案 0 :(得分:2)

def bigproduct(*args):
  newargs = [xrange(x) for x in args]
  return itertools.product(*newargs)

for i in bigproduct(3, 2, 4):
   ....

range()预先生成一个列表,因此预先使用时间和更多空间,但获取每个元素所需的时间更少。 xrange()动态生成每个元素,因此占用的空间和初始时间更少,但返回每个元素需要更多时间。

答案 1 :(得分:-1)

使用map:

可以轻松完成
from itertools import product
for i in product(*map(range, shape)):
    print i