[英]Cartesian product using python without itertools
我遇到了這個很好的python代碼行,用於我想在多行中帶回來的n個列表的笛卡爾積:
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。
示例中的行是列表推導 。 基本上,一行是構建一個列表並計算其成員。
要做同樣的事情,你必須添加一個初始化器並返回:
result = []
for x in seqs[0]:
for p in cart_product_1(*seqs[1:]):
result.append([x]+p)
return result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.