【发布时间】:2011-01-26 00:53:15
【问题描述】:
This question 询问如何计算给定数量向量的笛卡尔积。由于向量的个数是预先知道的,而且相当少,所以用嵌套的for循环很容易得到解。
现在假设给你一个用你选择的语言的向量向量(或列表列表或集合等):
l = [ [1,2,3], [4,5], [6,7], [8,9,10], [11,12], [13] ]
如果我被要求计算它的笛卡尔积,那就是
[ [1,4,6,8,11,13], [1,4,6,8,12,13], [1,4,6,9,11,13], [1,4,6,9,12,13], ... ]
我会继续递归。比如在quick&dirty python中,
def cartesianProduct(aListOfLists):
if not aListOfLists:
yield []
else:
for item in aListOfLists[0]:
for product in cartesianProduct(aListOfLists[1:]):
yield [item] + product
有没有一种简单的方法来迭代地计算它?
(注意:答案不需要在 python 中,无论如何我知道在 python 中 itertools 做得更好,如this question。)
【问题讨论】:
标签: algorithm language-agnostic iteration cartesian-product