python中的路径

2024-05-23 13:37:49 发布

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

考虑一个矩形网格

我想要一个简短而优雅的方法来生成从[x0,y0][x1,y1]的直线路径,其中x0=x1y0 = y1

例如,在输入[1,3], [3,3]时,应该生成输出[[1,3],[2,3],[3,3]。同样,如果输入是[3,3], [1,3]

我试过[[i,j] for i in range(self.origin[0],self.end[0]+1) for j in range(self.origin[1], self.end[1]+1)],但它只适用于输入有序的情况


Tags: 方法inself路径forrangeorigin直线
2条回答

你的问题是,来自x -> y的解应该与y -> x的解相同,也就是说,我们只对定义路径上的点感兴趣,而不是对这些点的任何顺序感兴趣。如果这是真的,那么只需找出哪个路径具有较小的x(或y),并将其指定为原点

origin = (3,3)
dest = (1,3)

origin, dest = sorted([origin, dest])

path = {(i,j) for i in range(origin[0], dest[0]+1) for j in range(origin[1], dest[1]+1)}
# note that this is now a set comprehension, since it doesn't make any sense
# to use a list of unique hashable items whose order is irrelevant

当然,这解决了任何无障碍的二维寻径问题。如果你知道只有一个方向在改变,那就只朝那个方向看

origin, dest = sorted((origin, dest))
if origin[0] == dest[0]:  # y is changing
    path = {(origin[0], j) for j in range(origin[1], dest[1]+1)}
else:  # x is changing
    path = {(i, origin[1]) for i in range(origin[0], dest[0]+1)}

step参数添加到范围中,得出start&;的符号;端差:

x_dir = copysign(1, self.end[0] - self.origin[0])
... for i in range(self.origin[0], self.end[0]+1, x_dir) ...

对y方向也要这样做

相关问题 更多 >