Алгоритм Powerset в Python: разница между + и добавить в списки - PullRequest
2 голосов
/ 02 декабря 2019

Я работаю над проблемой powerset в Python.

Powerset P (S) набора S - это набор всех подмножеств S. Например, если S = {a, b, c}, то P(s) = {{}, {a}, {b}, {c}, {a,b}, {a, c}, {b, c}, {a, b, c}}.

Это решение работает просто отлично:

def powerset(array):
    powerset = [[]]
    for num in array:
        for i in range(len(powerset)):
            curr_subset = powerset[i]
            powerset.append(curr_subset + [num])
    return powerset

Однако это решение не:

def powerset(array):
    powerset = [[]]
    for num in array:
        for i in range(len(powerset)):
            curr_subset = powerset[i]
            curr_subset.append(num)
            powerset.append(curr_subset)
    return powerset

Кажется, он перезаписывает каждый массив в блоке питания на каждом блоке питания.append операция. Для ввода [1, 2, 3] я получаю возвращаемое значение:

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

Любая идея, что я не до конца понимаю здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...