寻找一种模拟嵌套循环(或笛卡尔积)的方法,我遇到了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))也有区别吗?
答案 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