交织功能未产生预期结果
Interleaving function not producing expected results
我正在尝试创建一个函数,将二进制列表交织到数组中。矩阵大小为 10 行 x 9 列,初始化为 None
。这些位一次一个地馈入矩阵,第一个输入位被馈入 (0,0)。位被馈入(上一行+7)mod10,当列满时,将列右移,0列填充下一组位。
但是,我 运行 遇到了列填充循环的问题。零列中的每一行都设置为相同的值!
这是我目前的情况:
>>> 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 。越来越奇怪了...
答案由 Pavel 发布!
Your matrix actually contains N references to the same column. So when you modify a value in one column, this value is also modified in all other columns. Consider creating matrix another way to make independent columns: whosebug.com/q/2397141/6131611 whosebug.com/q/6667201/6131611
这绝对是一个菜鸟时刻,但我必须从中吸取教训!谢谢!
我正在尝试创建一个函数,将二进制列表交织到数组中。矩阵大小为 10 行 x 9 列,初始化为 None
。这些位一次一个地馈入矩阵,第一个输入位被馈入 (0,0)。位被馈入(上一行+7)mod10,当列满时,将列右移,0列填充下一组位。
但是,我 运行 遇到了列填充循环的问题。零列中的每一行都设置为相同的值!
这是我目前的情况:
>>> 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 。越来越奇怪了...
答案由 Pavel 发布!
Your matrix actually contains N references to the same column. So when you modify a value in one column, this value is also modified in all other columns. Consider creating matrix another way to make independent columns: whosebug.com/q/2397141/6131611 whosebug.com/q/6667201/6131611
这绝对是一个菜鸟时刻,但我必须从中吸取教训!谢谢!