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], ... ]
我將繼續進行遞歸。例如,在快速&骯髒的蟒蛇,
def cartesianProduct(aListOfLists):
if not aListOfLists:
yield []
else:
for item in aListOfLists[0]:
for product in cartesianProduct(aListOfLists[1:]):
yield [item] + product
有一種簡單的方法來計算它反覆?
(注:答案並不需要在蟒蛇,反正我知道,在Python itertools做的工作做得更好,爲this question。)
是的。的確很容易。謝謝。 – 2010-03-10 18:29:00
我認爲你的代碼實際上比你的算法效率稍低......; P – Larry 2010-03-10 18:36:39
是的......我有另一個與算法非常匹配的版本,但認爲它相當混亂!也許我可以發佈它... – 2010-03-10 18:37:37