【问题标题】:Cant understand the output of the Python 2D matrix无法理解 Python 2D 矩阵的输出
【发布时间】:2018-05-24 22:41:27
【问题描述】:

我正在尝试以螺旋格式打印值 1 到 9,如下所示:

[1,2,3]
[8,9,4]
[7,6,5]

但是,当我尝试通过 Python 脚本(如下所示)打印它时,它会覆盖它。我得到了正确的索引和值。我只是无法将值分配给正确的索引。脚本是:

n = 3
res = [[0]*n]*n

    count = 1

    def getcoord(r1,c1,r2,c2):
        for c in range(c1, c2+1):
            yield r1, c
        for r in range(r1+1, r2+1):
            yield r,c2
        if r1 < r2 and c1 < c2:
            for c in range(c2-1, c1-1, -1):
                yield r2,c
            for r in range(r2-1, r1, -1):
                yield r, c1


    r1 = 0
    r2 = n-1
    c1= 0
    c2 = n-1
    val = 1
    while r1<=r2 and c1<=c2:
        for r,c in getcoord(r1,c1,r2,c2):
            print(r,c)
            print("val", val)
            res[r][c] = val
            print("res", res)
            val += 1
        r1 += 1; r2 -= 1
        c1 += 1; c2 -= 1
    return res

当我尝试调试时,我得到如下输出:

(0, 0)
('val', 1)
('res', [[1, 0, 0], [1, 0, 0], [1, 0, 0]])
(0, 1)
('val', 2)
('res', [[1, 2, 0], [1, 2, 0], [1, 2, 0]])
(0, 2)
('val', 3)
('res', [[1, 2, 3], [1, 2, 3], [1, 2, 3]])
(1, 2)
('val', 4)
('res', [[1, 2, 4], [1, 2, 4], [1, 2, 4]])
(2, 2)
('val', 5)
('res', [[1, 2, 5], [1, 2, 5], [1, 2, 5]])
(2, 1)
('val', 6)
('res', [[1, 6, 5], [1, 6, 5], [1, 6, 5]])
(2, 0)
('val', 7)
('res', [[7, 6, 5], [7, 6, 5], [7, 6, 5]])
(1, 0)
('val', 8)
('res', [[8, 6, 5], [8, 6, 5], [8, 6, 5]])
(1, 1)
('val', 9)
('res', [[8, 9, 5], [8, 9, 5], [8, 9, 5]])

我在这里缺少什么?为什么我不能将正确的值分配给正确的索引,尽管它们都有? 提前致谢!

【问题讨论】:

    标签: python python-3.x matrix spiral


    【解决方案1】:

    [0]*n 创建一个包含 3 个零的列表:[0, 0, 0]

    然后,res = [[0]*n]*n 创建一个列表,您将其命名为 res,其中包含我们刚刚在上面创建的 相同 列表的三倍。

    因此,无论您使用名称 res[0]res[1] 还是 res[2] 来引用它,您始终访问的是相同的唯一列表。

    res[0][0] = 1 更新此列表的第一个元素,res[2][0] = 7 再次更新相同的元素。

    打印res 时,您会得到三倍的相同列表。

    你想要的是三个不同的列表。您可以像这样创建它们:

    res = [[0]*n for i in range(n)]
    

    【讨论】:

    • 哇!真的不知道这样的事情会引起这么大的麻烦!非常感谢,蒂埃里!
    猜你喜欢
    • 2020-09-08
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多