在Python中理解顺时针螺旋的打印矩阵

Posted

技术标签:

【中文标题】在Python中理解顺时针螺旋的打印矩阵【英文标题】:Understanding print matrix in clockwise spiral in Python 【发布时间】:2019-10-28 09:14:35 【问题描述】:

我发现这个练习是为了研究 Python 中的矩阵或二维向量(我是初学者)

'''
start row index - k 
end row index - m
start column index - l
end column index - n
iterator - i 
array or list - a
'''
# Python3 program to print  
# given matrix in spiral form 
def spiralPrint(m, n, a) : 
    k = 0; l = 0

    ''' k - starting row index 
        m - ending row index 
        l - starting column index 
        n - ending column index 
        i - iterator '''


    while (k < m and l < n) : 

        # Print the first row from 
        # the remaining rows  
        for i in range(l, n) : 
            print(a[k][i], end = " ") 

        k += 1

        # Print the last column from 
        # the remaining columns  
        for i in range(k, m) : 
            print(a[i][n - 1], end = " ") 

        n -= 1

        # Print the last row from 
        # the remaining rows  
        if ( k < m) : 

            for i in range(n - 1, (l - 1), -1) : 
                print(a[m - 1][i], end = " ") 

            m -= 1

        # Print the first column from 
        # the remaining columns  
        if (l < n) : 
            for i in range(m - 1, k - 1, -1) : 
                print(a[i][l], end = " ") 

            l += 1


a =[[1,2,3,4,5],
    [6,7,8,9,10],
    [11,12,13,14,15],
    [16,17,18,19,20]]
R = 4
C = 5

spiralPrint(R,C,a)

我想了解它背后的逻辑,我的意思是为什么它们使用 4 个循环来迭代以及为什么它们将索引分配为行和列? 另外,该函数如何确切地知道在元素的末尾它必须进入第二个列表并绕过?

【问题讨论】:

【参考方案1】:

有四个 for 循环,一个用于螺旋的每一侧。 while 循环的每次迭代都会写出矩阵的一个 ringkm 控制每列需要打印多少。 k 从矩阵高度处的0m 开始。每次打印顶行时,k 会增加 1,因此要打印的后续列从低一行开始。每次打印底行时,m 会减 1,因此后续要打印的列在前一行停止。

同样,ln 控制每行需要打印多少,并在每次打印一列时进行调整。

如果您在一张纸上绘制矩阵并在标记要打印的部分时写出kmln,一切都会更容易理解。

这个练习很好地说明了范围在 Python 中是如何工作的。

【讨论】:

这个答案有帮助吗?

以上是关于在Python中理解顺时针螺旋的打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

顺时针和逆时针螺旋打印二维数组(行列式)

螺旋打印矩阵

顺时针打印矩阵(python)

剑指offer-顺时针打印矩阵-数组-python

LeetCode54. 螺旋矩阵

剑指offer顺时针打印矩阵python