Python中itertools.product的输入
我在寻找一种模拟嵌套循环(或者说笛卡尔积)的方法时,发现了一个叫做 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))
由于列表的大小会变化,我对如何做到这一点感到很困惑,因为这需要很多预先编写的代码,涉及到一堆复杂的条件判断和列表的大小。
另外,调用 product(range(3)) 和 product(xrange(3)) 有什么区别吗?
2 个回答
-1
这可以很简单地通过使用map来实现:
from itertools import product
for i in product(*map(range, shape)):
print i
2
def bigproduct(*args):
newargs = [xrange(x) for x in args]
return itertools.product(*newargs)
for i in bigproduct(3, 2, 4):
....
range()
会一次性生成一个列表,这样会在开始的时候占用更多的时间和空间,但取出每个元素时会比较快。xrange()
则是按需生成每个元素,这样在开始的时候占用的空间和时间都比较少,但取出每个元素时会比较慢。