在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 循环的每次迭代都会写出矩阵的一个 ring。 k
和 m
控制每列需要打印多少。 k
从矩阵高度处的0
和m
开始。每次打印顶行时,k
会增加 1,因此要打印的后续列从低一行开始。每次打印底行时,m
会减 1,因此后续要打印的列在前一行停止。
同样,l
和 n
控制每行需要打印多少,并在每次打印一列时进行调整。
如果您在一张纸上绘制矩阵并在标记要打印的部分时写出k
、m
、l
和n
,一切都会更容易理解。
这个练习很好地说明了范围在 Python 中是如何工作的。
【讨论】:
这个答案有帮助吗?以上是关于在Python中理解顺时针螺旋的打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章