我遇到了这个很好的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。
答案 0 :(得分:3)
示例中的行是list comprehension。基本上,一行是构建一个列表和计算其成员。
要做同样的事情,你必须添加一个初始化器并返回:
result = []
for x in seqs[0]:
for p in cart_product_1(*seqs[1:]):
result.append([x]+p)
return result