python - 什么是反向遍历坐标列表的有效方法

时间:2017-07-02 08:42:10

标签: python list

我有一个当前列表,其中包含从起点和终点开始的路径点 这是来自3x3矩阵,起始位置为2,2,结束位置为0,0

网格也有位置不可遍历的单元格:     0,1     0,2     1,1

所以网格看起来像这样:

            -----------------
            |Goal| Wall| Wall |
            ==================
            |    |Wall |      |
            ===================
            |    |     | Start|
            ===================

运行算法以获得最佳路径后,我能够获得从2,2到0的可能方法

PathCaptured:      ['2,2,1,2,2.0', '2,2,2,1,2.0', '2,1,1,0,5.0', '2,1,2,0,4.0', '1,0,0,0,7.0']

所以结构表示为:[startposx,startposy,destx,desty,score]

我希望反过来使用路径来重建点。

我遇到的问题是我正在创建2个for循环来遍历列表,以确保我连接两个点以得出答案

[[2,2][2,1][1,0][0,0]]

在python中有更简单的方法吗?

使用当前代码更新:

        first_time=True
        for i, e in reversed(list(enumerate(self.action_list))):

            if debug:
                print i, e
            if first_time:
                startx,starty,destx,desty,_ = e.split(",")
                ctr += 1
                box_path[ctr] = [destx, desty]
                ctr += 1
                box_path[ctr] = [startx,starty]
                #box_path.append([destx,desty])
                #box_path.append([startx,starty])
                first_time = False

            else:
                for j in range(len(self.action_list)):
                    dx, dy, dx_1, dy_1,_= self.action_list[j].split(",")
                    Dx,Dy = box_path[ctr]
                    if (Dx == dx_1 and Dy == dy_1):
                        box_path[ctr+1] = [dx,dy]
                        ctr += 1
                        #box_path.append([dx,dy])
                        break
            if debug:
                print box_path

1 个答案:

答案 0 :(得分:0)

看起来你的返回值是在最终单元格到达某个C1的目标的意义上排序的,然后你有一堆从C2到所有相邻单元格的单元格(一个是C1,其余的不相关),依此类推。所以当你找到一个连接到你的单元格时就会向后退,你可以保证你在路上(似乎你只是再次迭代,这是浪费):

def getStep(stepStr):
    step = map(int,stepStr.split(','))
    return (step[0],step[1]),(step[2],step[3]) #Can return score if you need

goal = (2,2) #Your example

pos = len(self.action_list)-1
start,stop = getStep(self.action_list[pos])
res = [stop]
while start != goal:
    pos -= 1
    nstart,nstop = getStep(self.action_list[pos])
    while nstop != start:
        pos -= 1
        nstart,nstop = getStep(self.action_list[pos])
    res.append(start)
    start = nstart
res.append(goal)

这将从头到尾遍历列表一次。内环跳过不相关的不连接到下一个单元的单元。我在这里完全忽略了错误检查,比如路径是坏的(例如永远nstop!=start)。