【发布时间】:2020-08-17 03:03:38
【问题描述】:
我正在尝试创建一个函数来将二进制列表交错到数组中。矩阵大小为 10 行 x 9 列,初始化为None。这些位一次被送入矩阵,第一个输入位被送入 (0,0)。这些位被送入(前一行 + 7)模 10,当列满时,列向右移动,第 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 .越来越奇怪了……
【问题讨论】:
-
您的矩阵实际上包含对同一列的 N 个引用。因此,当您修改一列中的值时,该值也会在所有其他列中被修改。考虑以另一种方式创建矩阵以制作独立列:stackoverflow.com/q/2397141/6131611stackoverflow.com/q/6667201/6131611
-
有效!绝对是一个菜鸟时刻>〜>我很沮丧这不是一个答案,所以我可以标记它!
标签: python matrix interleave