我正在尝试打印2D阵列的对角线,从左下角开始向右上角移动。我已经设法打印矩阵的前半部分但是当我必须打印它的第二部分时我卡住了,我希望有人能给我一个如何继续的线索。这就是我所拥有的:
matrix = [ ["A", "B", "C", "D"], ["E","F","G","H"], ["I","J","K","L"], ["M","N","O","P"], ["Q", "R", "S","T"]]
和将对角线打印到一点的部分功能:
def diagonal_matrix_print(input_matrix):
width = len(input_matrix[0])
height = len(input_matrix)
start_row = height - 1
first_row = 0
for start_row in reversed( range (0, height)):
i = start_row
for column in range (0, width):
if i == height:
start_row = start_row - 1
break
print input_matrix[i][column]
i = i + 1
print
我面临的问题是打印从矩阵的后半部分开始的对角线 - B G L,C M,D
我尝试使用另外2个for循环,如:
for row in range ( 0, height -1):
i = row
for start_column in range (1, width):
print input_matrix[i][start_column]
i = i + 1
但是当行值更改为1时,不再打印对角线了...请帮助
答案 0 :(得分:0)
假设我们有列表>>> L = [[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
:
diagonals
我们想要一个函数>>> diagonals(L)
[[9], [6, 10], [3, 7, 11], [0, 4, 8], [1, 5], [2]]
,以便
L
我们可以考虑(x, y)
中关于2个不同坐标的项目
系统。 (x, y)
对应的常用L[x][y]
坐标系
值为(p, q)
的位置。
然后还有p
坐标系,其中pth
代表。{1}}
p=0
对角线,q
是左下角的诊断。 qth
表示pth
诊断中的q=0
项,其中(p, q) = (0,0)
从左侧开始
边缘。因此,L[3][0] = 9
对应于值为h,w
的位置
在上面的例子中。
让L
分别等于p
的高度和宽度。
然后0
的范围从h + w - 1
到(p, q)
。
我们需要一个从(x, y)
坐标转换为x
坐标的公式。
p
随着x
的增加呈线性下降。 q
随着(p, q) = (0, 0)
的增加呈线性增长。x
时,h
等于x = h - p + q
。因此:y
。
p
不随q
更改(如果y
已修复)。q
随着(p, q) = (0, 0)
的增加呈线性增长。y
时,q
等于y = q
。因此,x
。
现在,y
和(0 <= x = h - p + q < h) and (0 <= y = q < w)
的有效值范围要求:
(p - h + 1 <= q < p + 1) and (0 <= q < w)
相当于
max(p - h + 1, 0) <= q < min(p + 1, w)
相当于
L
因此,我们可以使用
遍历for p in range(h + w - 1):
for q in range(max(p-h+1, 0), min(p+1, w))
L[h - p + q - 1][q]
的项目
def diagonals(L):
h, w = len(L), len(L[0])
return [[L[h - p + q - 1][q]
for q in range(max(p-h+1, 0), min(p+1, w))]
for p in range(h + w - 1) ]
matrix = [ ["A", "B", "C", "D"], ["E","F","G","H"], ["I","J","K","L"], ["M","N","O","P"], ["Q", "R", "S","T"]]
for diag in diagonals(matrix):
print(diag)
['Q']
['M', 'R']
['I', 'N', 'S']
['E', 'J', 'O', 'T']
['A', 'F', 'K', 'P']
['B', 'G', 'L']
['C', 'H']
['D']
产量
<%= stylesheet_link_tag 'app', media: 'all' %>
<%= javascript_include_tag 'app' %>