簡體   English   中英

Powerset遞歸,列表理解python3

[英]Powerset recursive, list comprehension python3

我是Python3的新手,正在嘗試做一個遞歸powerset函數。 它應該使用列表理解。

我寫:

def powerset(seq):
    if not seq:
       return [[]]
    return powerset(seq[1:]) + [[seq[0]] + n for n in powerset(seq[1:])]

該函數有效,但是我得到了反饋,並被告知沒有必要兩次調用該函數。 它對很多計算都起到了作用。 它應該能夠輕松地計算多達20個功率集。 那我該怎么辦? 如果不兩次調用該函數,就無法使其正常工作。 謝謝。

只需計算powerset(seq[1:]) ,將其存儲在變量中,然后使用兩次:

def powerset(seq):
    if not seq:
        return [[]]
    ps = powerset(seq[1:])
    return ps + [[seq[0]] + n for n in ps]

與您的不同之處在於,這種方式您使用 ps兩次,但是只計算一次。


另外,您可以使用雙重列表理解(如果您喜歡這種東西...)

def powerset(seq):
    return [x for ps in powerset(seq[1:]) for x in ([seq[0]] + ps, ps)] if seq else [[]]

在此,列表理解定義了相同的臨時變量ps 但是請注意,這種方式的結果順序會稍有不同。


我感到非常不清楚。 我實際上不明白,僅將其分配給變量怎么會改變呢? 這意味着同一件事嗎?

您似乎在這里對純數學的想法太多了。 在編程中, y = f(x)並不意味着“ y與f(x)相同/同義詞”,而是“將f(x)的結果分配給y”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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