【问题标题】:Interleaving function not producing expected results交错函数未产生预期结果
【发布时间】: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


【解决方案1】:

Pavel 发布的答案!

您的矩阵实际上包含对同一列的 N 个引用。因此,当您修改一列中的值时,该值也会在所有其他列中修改。考虑以另一种方式创建矩阵以制作独立列:stackoverflow.com/q/2397141/6131611 stackoverflow.com/q/6667201/6131611

这绝对是一个菜鸟时刻,但我必须从中学习!谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多