0

我找到了这个练习来研究 Python 中的矩阵或 2d 向量(我是初学者)

'''
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 个循环进行迭代以及为什么将索引分配为行和列?此外,该函数如何准确地知道在元素的末尾它必须进入第二个列表并四处走动?

4

1 回答 1

0

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

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

如果您在一张纸上绘制矩阵并写出k, m,ln标记正在打印的部分,则一切都更容易理解。

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

于 2019-10-29T08:21:01.203 回答