2015-09-04 153 views
0

我試圖調試一個程序,並遇到問題。任何人都可以指導我解決這個問題嗎?返回項目的遞歸Python函數

該程序旨在獲取項目列表,並返回這些項目的powersets列表。

一個例子:

>>> getAllSubsets([1,2]) 
[[1,2],[1],[2],[]] 

的代碼:

def getAllSubsets(lst): 
    if not lst: 
     return [] 
    withFirst = [ [lst[0]] + rest for rest in getAllSubsets(lst[1:]) ] 
    withoutFirst = getAllSubsets(lst[1:]) 
    return withFirst + withoutFirst 
+0

你遇到什麼問題?此外,您不必調用'getAllSubsets'兩次;調用一次並保存結果。 – chepner

+1

有什麼問題? –

+0

它只是繼續遞歸,直到它再次返回空列表。 –

回答

3

有更好的食譜,是的。但我認爲你的代碼的問題是你應該用return [[]]替換return []。空集本身就是一個子集。

1

有在​​the recipes section一個powerset發生器;你應該使用它。

def powerset(iterable): 
    "powerset([1,2,3]) -->() (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" 
    s = list(iterable) 
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))