这个问题询问如何计算给定数量向量的笛卡尔积。由于向量数量是预先知道且相对较小的,所以可以通过嵌套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], ... ]
我会使用递归。例如,在“快速脏” 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可以更好地完成此工作,就像这个问题中所述。)