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