在寻找一种模拟嵌套循环(或笛卡尔积)的方法时,我遇到了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))
由于列表的大小各不相同,我非常困惑如何做到这一点,而无需基于大量的if和列表的大小进行大量的预编码。
调用product(range(3))或product(xrange(3))也有区别吗?
最佳答案
def bigproduct(*args):
newargs = [xrange(x) for x in args]
return itertools.product(*newargs)
for i in bigproduct(3, 2, 4):
....
range()
预先生成一个列表,因此使用预先的时间和更多的空间,但是花费较少的时间来获取每个元素。 xrange()
即时生成每个元素,因此占用较少的空间和初始时间,但是返回每个元素花费的时间更多。关于python - itertools.product的python输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3020684/