所以我正在寻找不同的方法来计算n数组的笛卡尔积,我遇到了使用以下代码的相当优雅的解决方案(这里是 SO):
import itertools
for array in itertools.product(*arrays):
print array
查看python 文档页面(我使用的是 2.7,顺便说一句)itertools.product()
,它说代码等效于以下内容:
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
(它确实注意到以下几点:这个函数相当于下面的代码,除了实际的实现不会在内存中建立中间结果:)
我不是 CS 人——所以我很不擅长估计这个算法的效率。我的第一个猜测是O(n^2)
(由于嵌套的 for 循环)。
我错了吗?