2017-12-17 1 views
0

재귀 함수에서 작업하는 모든 부분 집합의 집합을 생성하는 동안, 나는 아래에 정의 된이 fuction를 나에게 예상치 못한 출력 준 것으로 나타났습니다 : "그것을하지 왜재귀 스택은 파이썬에서 호출 - 매핑

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

을 for-loop가 활성화되어있을 때 제대로 작동하지만, 활성화되지 않은 경우에는 원하는 하위 집합에 완전히 매핑되지 않습니다.

print(ss) 

for 루프가 활성화되어있을 때와 동일한 결과를 인쇄하지 않습니다.

무엇이 누락 되었습니까? I보고 원하는 무엇

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

, 어떻게 - - 내가-찾을 수 있습니다 - 모든 - 더 - 집합의 - 세트 [참조 -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