【发布时间】:2016-11-29 00:24:23
【问题描述】:
所以基本上我想了解 itertools 中 product() 函数的概念。我的意思是收益和回报之间有什么区别。这段代码是否可以缩短。
def product1(*args, **kwds):
pools = map(tuple, args) * kwds.get('repeat', 1)
n = len(pools)
if n == 0:
yield ()
return
if any(len(pool) == 0 for pool in pools):
return
indices = [0] * n
yield tuple(pool[i] for pool, i in zip(pools, indices))
while 1:
for i in reversed(range(n)): # right to left
if indices[i] == len(pools[i]) - 1:
continue
indices[i] += 1
for j in range(i+1, n):
indices[j] = 0
yield tuple(pool[i] for pool, i in zip(pools, indices))
break
else:
return
【问题讨论】:
-
您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask。
-
没有
itertools?然后我猜是循环时间。您是否有理由不使用itertools?还是更像是对自己的挑战? -
1.使用 itertools 编写代码。 2. 转到 itertools 文档。对于您使用的每个函数,找到“此函数等效于以下代码:”块。 3. 将这些块复制到您的代码中。
-
如果它总是
A和B-- 你可以使用bin()得到0到2**n-1范围内所有数字的二进制扩展,然后替换@ 987654329@ byA和1byB在结果字符串中。 -
我强烈推荐使用成熟且经过测试的
itertools标准模块。作为程序员,从不建议重新发明轮子。话虽如此,我们在这里没有尝试任何代码,只是请求答案(听起来有点像家庭作业)。我将首先查看 itertools 中的product()函数。
标签: python recursion itertools