用python实现取回形数

样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2

做这个题几乎用了我一天时间,因为对python中的二维数组不太熟悉,用方法pop弹出列表中的列表中的元素的时候,会变成空列表,然后用while~remove循环将列表中的空列表删除。
我的代码

#回形取数
n,m=input().split()
n=int(n)
m=int(m)
arr=[]
for k in range(n):
	arr.append(input().split())
s=[]
print(arr)
while True:
	#向下
	for k in range(len(arr)):
		p=arr[k].pop(0)
		s.append(p)
	while [] in arr:
		arr.remove([])	
	if len(arr)==0:
		break
	

	#向右
	for k in range(len(arr[0])):
		

		
		p=arr[-1].pop(0)
		s.append(p)
	

	while [] in arr:
		arr.remove([])
	
	if len(arr)==0:
		break
	#向上
	
	for k in range(len(arr)):
		
		p=arr[len(arr)-1-k].pop(-1)
		s.append(p)
	
	while [] in arr:
		arr.remove([])
	if len(arr)==0:
		break
	print(arr)
	#向左
	for k in range(len(arr[0])):
		p=arr[0].pop()
		s.append(p)
	while [] in arr:
		arr.remove([])
	if len(arr)==0:
		break
	
for i in s:
print(i.end=' ')

以下是标准答案

m, n = map(int, input().split())
row = col = count = 0
matrix = [[] for _ in range(m)]

for i in range(m):
    arr = input().split()
    for j in range(n):
        matrix[i].append(int(arr[j]))

while count < m * n:  # 总共m*n个数
    while row < m and matrix[row][col] != -1:  # 向下取数
        print(matrix[row][col], end=' ')
        matrix[row][col] = -1  # 将去过的位置置为-1
        row += 1
        count += 1
    row -= 1  # 上个循环结束后row的值为m,需要减1,否则越界
    col += 1  # 列值加1,因为第零列在上个循环已经输出,往右推一行
    while col < n and matrix[row][col] != -1:  # 向右取数
        print(matrix[row][col], end=' ')
        matrix[row][col] = -1  # 将去过的位置置为-1
        col += 1
        count += 1
    row -= 1  # 往上推一行
    col -= 1  # 上个循环使列值为n
    while row >= 0 and matrix[row][col] != -1:  # 向上取数
        print(matrix[row][col], end=' ')
        matrix[row][col] = -1  # 将去过的位置置为-1
        row -= 1
        count += 1
    row += 1  # 上个循环使行值为-1
    col -= 1  # 往左推一行
    while col >= 0 and matrix[row][col] != -1:  # 向左取数
        print(matrix[row][col], end=' ')
        matrix[row][col] = -1  # 将去过的位置置为-1
        col -= 1
        count += 1
    col += 1  # 上个循环使列值为-1
    row += 1  # 向下推一行


版权声明:本文为qq_45208848原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。