簡體   English   中英

使用python而不使用itertools的笛卡爾積

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM