当需要打印螺旋矩阵时,我们可以使用迭代器的方法逐行或逐列进行输出。下面是Python使用迭代器打印螺旋矩阵的思路及代码示例。
思路
- 定义一个迭代器函数,输入参数为二维数组matrix。
- 定义一个迭代器变量direction,表示遍历方向(向右、向下、向左、向上)。
- 定义四个变量r1、r2、c1、c2,表示矩阵四角的行与列。
- 在迭代器函数里,循环遍历矩阵,输出当前位置的值,并根据direction移动位置。
- 当r1>r2 或 c1>c2时,表示已经遍历完整个矩阵,退出循环。
代码示例
以下是一个使用迭代器打印n x n的螺旋矩阵的Python代码示例:
def spiral_matrix(n):
matrix = [[0]*n for _ in range(n)]
direction = 0
r1, r2, c1, c2 = 0, n-1, 0, n-1
for i in range(1, n*n+1):
matrix[r1][c1] = i
if direction == 0:
c1 += 1
if c1 > c2:
direction = 1
r1 += 1
elif direction == 1:
r1 += 1
if r1 > r2:
direction = 2
c2 -= 1
elif direction == 2:
c2 -= 1
if c1 > c2:
direction = 3
r2 -= 1
else:
r2 -= 1
if r1 > r2:
direction = 0
c1 += 1
return matrix
以上代码会返回一个n x n的螺旋矩阵。
另外,这里提供一个更加通用的迭代器实现,可以打印任意大小的矩阵。
class SpiralIterator:
def __init__(self, matrix):
self.matrix = matrix
self.directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
self.direction = 0
self.row, self.col = 0, -1
self.m, self.n = len(matrix), len(matrix[0])
def __iter__(self):
return self
def __next__(self):
for i in range(4):
drow, dcol = self.directions[self.direction]
row, col = self.row + drow, self.col + dcol
if 0 <= row < self.m and 0 <= col < self.n and self.matrix[row][col] is not None:
self.row, self.col = row, col
return self.matrix[self.row][self.col]
self.direction = (self.direction + 1) % 4
return None
使用示例:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
for val in SpiralIterator(matrix):
print(val, end=" ")
以上代码将输出矩阵matrix的螺旋遍历结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用迭代器打印螺旋矩阵的思路及代码示例 - Python技术站