Python中itertools.product的输入

1 投票
2 回答
689 浏览
提问于 2025-04-15 23:50

我在寻找一种模拟嵌套循环(或者说笛卡尔积)的方法时,发现了一个叫做 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() 则是按需生成每个元素,这样在开始的时候占用的空间和时间都比较少,但取出每个元素时会比较慢。

撰写回答