Python кодирование вопрос о получении всех подмножеств - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь получить все подмножество из уникального списка. Я смог решить проблему, используя пустые списки с длиной, равной исходному списку. но когда я захотел использовать пустой список без None в качестве заполнителя, рекурсия начала действовать по-другому.

  1. Решение с пустым списком с заполнителем Нет
def all_subsets(input_list):
    subset_list =[]
    subset = [None]*len(input_list)
    helper(input_list, subset, 0)
    return subset_list

def helper(input_list, subset, i):

    #condition
    if i == len(input_list):
        print(subset)

    else:
        # First Case
        subset[i] = None
        helper(input_list, subset, i+1)
        # Second Branch
        subset[i] = input_list[i]
        helper(input_list, subset, i+1)

all_subsets(input_list)

[None, None, None]
[None, None, 3]
[None, 2, None]
[None, 2, 3]
[1, None, None]
[1, None, 3]
[1, 2, None]
[1, 2, 3]

  1. Ошибка при использовании полностью пустого списка для добавления элементов для создания подмножества
def all_subsets_2(input_list):
    subsets_list =[]
    subset_list =[]
    helper_2(input_list, subsets_list, subset_list, 0)
    return subsets_list


def helper_2(input_list, subsets_list, subset_list, i):

    #condition
    if i == len(input_list):
        subsets_list.append(subset_list)

    else:
        # First Case
        helper_2(input_list, subsets_list, subset_list, i+1)
        # Second Branch
        subset_list.append(input_list[i])
        helper_2(input_list, subsets_list, subset_list, i+1)



print(all_subsets_2(input_list))

[[3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3], [3, 2, 3, 1, 3, 2, 3]]
...