获取python2dlis中两点之间对角线上的点列表

2024-06-16 14:09:00 发布

您现在位置:Python中文网/ 问答频道 /正文

对于给定的二维正方形列表,请说:

foo2d = [
[1, 1, 1, 1, 3],
[1, 3, 0, 3, 4],
[1, 1, 1, 1, 3],
[1, 3, 0, 2, 4],
[1, 3, 1, 3, 4]
]

我想要一个从(0,1)(foo2d[1][0])到它的点对角线(2,3)(foo2d[3][2])的对角线列表。所以在上面的玩具列表中,返回的列表应该是:[1, 0, 1]

我尝试利用这条线的斜率是1(或-1)的事实,因此列表中的元素必须满足:

     pointY - startY
abs(-----------------) == 1
     pointX - startX

在x最小值和x最大值之间。我没有代码实现,因为a)它破坏了一切,b)我的计算机在保存文件时崩溃,迫使我恢复到不包含该代码的git备份。你知道吗

如果需要的话,我可以试着为这种行为编写一些伪代码。谢谢你能给我任何关于这个问题的想法!你知道吗


Tags: 代码元素利用列表abs事实玩具对角线
1条回答
网友
1楼 · 发布于 2024-06-16 14:09:00

如果线的斜率只能为1或-1,则可以尝试以下方法:

def get_diagonal_points(matrix, start_x, start_y, end_x, end_y):
    # make start_x <= end_x, if you don't need to check, remove this line
    if start_x > end_x:
        start_x, start_y, end_x, end_y = end_x, end_y, start_x, start_y

    result = []
    slope = (end_y - start_y) // (end_x - start_x)
    for i, j in zip(range(start_x, end_x), range(start_y, end_y, slope)):
        result.append(matrix[i][j])
    result.append(matrix[end_x][end_y])  # add end point
    return result

测试和输出:

foo2d = [
[1, 1, 1, 1, 3],
[1, 3, 0, 3, 4],
[1, 1, 1, 1, 3],
[1, 3, 0, 2, 4],
[1, 3, 1, 3, 4]
]
print(get_diagonal_points(foo2d, 0, 1, 2, 3))
# [1, 0, 1]
print(get_diagonal_points(foo2d, 0, 4, 3, 1))
# [3, 3, 1, 3]
print(get_diagonal_points(foo2d, 3, 1, 0, 4))
# [3, 3, 1, 3]

相关问题 更多 >