我有一个由不同数字组成的 8x8 网格,我想获取包含给定起始位置的对角线元素。这是一个例子
l = [[str(randint(1,9)) for i in range(8)] for n in range(8)]
>> [
[1 5 2 8 6 9 6 8]
[2 2 2 2 8 2 2 1]
[9 5 9 6 8 2 7 2]
[2 8 8 6 4 1 8 1]
[2 5 5 5 4 4 7 9]
[3 9 8 8 9 4 1 1]
[8 9 2 4 2 8 4 3]
[4 4 7 8 7 5 3 6]
]
我将如何从位置 x=4 和 y=3 获取对角线(即该列表中的第四个列表和第五个元素)?所以我想要的对角线是 [5,2,6,4,4,1,3]。
最佳答案
根据x
和y
的差值,可以计算对角线左上角项的行数和列数,并根据两个边界的较低者与起始行和列的较高者之间的差异:
def diagonal(m, x, y):
row = max((y - x, 0))
col = max((x - y, 0))
for i in range(min((len(m), len(m[0]))) - max((row, col))):
yield m[row + i][col + i]
这样:
m = [
[1, 5, 2, 8, 6, 9, 6, 8],
[2, 2, 2, 2, 8, 2, 2, 1],
[9, 5, 9, 6, 8, 2, 7, 2],
[2, 8, 8, 6, 4, 1, 8, 1],
[2, 5, 5, 5, 4, 4, 7, 9],
[3, 9, 8, 8, 9, 4, 1, 1],
[8, 9, 2, 4, 2, 8, 4, 3],
[4, 4, 7, 8, 7, 5, 3, 6],
]
print(list(diagonal(m, 4, 3)))
输出:
[5, 2, 6, 4, 4, 1, 3]
关于python - 如何从特定元素获取矩阵/网格的对角线元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892732/