2017-12-17 6 views
0

再帰関数について作業する全ての部分集合の集合を生成する一方で、私は以下に定義本のfuctionは私の予想外の出力与えたことに気づいた:「それをしないのはなぜ再帰スタックは、Pythonでの呼び出し - マッピング

[[]], None, None, None and None. 

をforループがアクティブであるときに適切に動作しますが、アクティブでないときは完全に目的のサブセットにマップされません。

print(ss) 

forループがアクティブであるときと同じことを表示しません。

私には何が欠けていますか?

def get_all_subsets(some_list): 



    """Returns all subsets of size 0 - len(some_list) for some_list""" 
    if len(some_list) == 0: 
     # If the list is empty, return the empty list 
     return [[]] 
    subsets = [] 

    first_elt = some_list[0] 
    rest_list = some_list[1:] 

    ss = get_all_subsets(rest_list) 
    print(ss) 

    # for partial_subset in ss: 
    #  subsets.append(partial_subset) 
    #  next_element = partial_subset[:] + [first_elt] 
    #  subsets.append(next_element) 
    # return subsets 


L = [1,2,3,4] 

print(get_all_subsets(L)) 

私は見たいは次のとおりです。

[[2,3,4]、[3,4]、[4]、[]]ここで

がもっとありますSO値するコード:

def get_all_subsets(some_list): 
    """Returns all subsets of size 0 - len(some_list) for some_list""" 
    if len(some_list) == 0: 
     # If the list is empty, return the empty list 
     return [[]] 
    subsets = [] 

    first_elt = some_list[0] 
    rest_list = some_list[1:] 

    ss = get_all_subsets(rest_list) 
    print(ss) 

    for partial_subset in ss: 
     print(partial_subset) 
     #  subsets.append(partial_subset) 
#  next_element = partial_subset[:] + [first_elt] 
#  subsets.append(next_element) 
    return subsets 
+0

、どのように--iは、見つけることができます - すべての-サブセット・オブ・セット[参照-with-exactly-n-elements](https://stackoverflow.com/questions/374626/how-can-i-find-all-the-subsets-of-a-set-with-exactly-n-elements) 「学生がこれを行うが、それとそれらとこれらの文字列を使用しない」機能を必要とする場合は、 –

+0

インデントがオフになっている。 return文がなければ、関数は 'None'を返します。 – hpaulj

答えて

1

あなたはケースに何も返さないので、それが動作しないリストが空である(あなただけのprint())。あなたは何も返さない場合は、明示的にこの関数は返しNone暗黙的

def get_all_subsets(some_list): 
    if len(some_list) == 1: # if len is 1 then the last element was added 
          # previously, just add the empty list 
     return [[]] 

    if len(some_list) > 1: # add rest of list and recurse 
     return [some_list[1:]] + get_all_subsets(some_list[1:]) 


L = [1,2,3,4] 
print(get_all_subsets(L)) 

出力:また

[[2, 3, 4], [3, 4], [4], []] 
+0

ありがとうございました:コメントが削除されたら、「返品」が表示されます。スタックの再帰との相互作用をよりよく理解するために、これを試しています。 – Phil

関連する問題