Функция чередования не дает ожидаемых результатов - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь сделать функцию для чередования двоичного списка в массив. Размер матрицы составляет 10 строк x 9 столбцов, инициализированных до None. Биты вводятся в матрицу по одному, причем первый входной бит подается в (0,0). Биты подаются в (предыдущая строка + 7) мод 10, и когда столбец заполнен, столбец перемещается вправо, а столбец 0 заполняется следующим набором битов. Однако я столкнулся с проблемой заполнения столбца l oop. Каждой строке в нулевом столбце присваивается одно и то же значение!

Вот что я имею до сих пор:

>>> row = 0
>>> interleave_row = [None,None,None,None,None,None,None,None,None]
>>> interleave_matrix = [interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row]

Это дает матрицу, которая выглядит следующим образом:

    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None]]
>>> input = [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0]
>>> for i in range(0,10):
        interleave_matrix[row][0] = input[i]
        row = (row+7)%10

Это дает:

    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None]]

Это должно выглядеть так:

    [0, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None]]

У меня есть момент нуба? Я знаю, что приращение строки работает нормально, так как я зациклил его сам. Что может быть причиной такого странного поведения?

РЕДАКТИРОВАТЬ: Я только что попытался зацикливание первых четырех битов (гарантированно заканчивается на 0 бит), и это не установка всей строки в бит, это просто установив всю строку в 1 . Становится все более и более странным ...

1 Ответ

0 голосов
/ 02 мая 2020

Ответ от Павла!

Ваша матрица фактически содержит N ссылок на один и тот же столбец. Поэтому, когда вы изменяете значение в одном столбце, это значение также изменяется во всех других столбцах. Попробуйте создать матрицу еще одним способом создания независимых столбцов. Это! Спасибо!

...