使用python而不使用itertools的笛卡尔积

时间:2017-11-13 23:35:48

标签: python

我遇到了这个很好的python代码行,用于我想要在多行中返回的笛卡尔积的多个列表:

def cart_product_1(*seqs):
    if not seqs:
        return [[]]
    else:
        return [[x] + p for x in seqs[0] for p in cart_product_1(*seqs[1:])]

这对我来说似乎很简单,但显然我在这里遗漏了一些东西。我想我需要在某个地方附上一个清单,但不能完全理解它。

def cart_product_1(result,*seqs):
    if not seqs:
        return [[]]
    else:
        for x in seqs[0]:                       
            for p in cart_product_1(result,*seqs[1:]):
                 result.append([x]+p)
        return result

这会导致MemoryError。

1 个答案:

答案 0 :(得分:3)

示例中的行是list comprehension。基本上,一行是构建一个列表计算其成员。

要做同样的事情,你必须添加一个初始化器并返回:

result = []
for x in seqs[0]:                       
    for p in cart_product_1(*seqs[1:]):
        result.append([x]+p)
return result