Печать не соответствует массиву, к которому я добавляюсь - PullRequest
1 голос
/ 16 февраля 2020

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

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

Вот код:

test = []
def partitioner(array1, array2):
    a = array1
    b = array2
    for _ in range(len(b)):
        a.append(b[0])
        del b[0]

        if(len(b) >= 1 and len(a) >= 1):
            print([a, b])       # This part right here, I'm printing the expected
            test.append([a, b]) # But this array is getting the actual
        partitioner(a, b)
        b.append(a[-1])
        del a[-1]

partitioner([], [x for x in range(3)])
print(test)

Ожидаемый:

[
[[0], [1, 2]],
[[0, 1], [2]],
[[0, 2], [1]],
[[1], [2, 0]],
[[1, 2], [0]],
[[1, 0], [2]],
[[2], [0, 1]],
[[2, 0], [1]],
[[2, 1], [0]]]

Фактический:

[
[[], [0, 1, 2]],
[[], [0, 1, 2]],
[[], [0, 1, 2]], 
[[], [0, 1, 2]], 
[[], [0, 1, 2]], 
[[], [0, 1, 2]], 
[[], [0, 1, 2]], 
[[], [0, 1, 2]], 
[[], [0, 1, 2]]]

1 Ответ

2 голосов
/ 16 февраля 2020

a и b являются списками, поэтому, когда они переопределяются на каждой итерации рекурсии с последним значением, они также изменяют значения в test. Добавьте копию a и b вместо

test.append([a[:], b[:]])
...