簡體   English   中英

有沒有辦法以 python 中的特定索引順序遍歷列表

[英]Is there a way to iterate through a list in a specific order of indexes in python

好的,自從我在 python 工作以來已經有很長時間了。 但基本上我正在做經典的 8 拼圖問題,所以給定一個字符串,例如“12-453786”,我的程序將它解決為所需的“12345678-”。 我目前正在使用廣度優先搜索來解決它,並在下面的示例中存儲訪問過的節點和來自的節點。 但是,要跟蹤完成謎題所需的路徑或移動量,我需要能夠從已解決的元組開始,並通過我的元組列表追溯到開始 state

我正在考慮做某種 whilesolved.= startstate 循環,但這不會完全奏效。

 def breadth_first_search(puz):
    qu = queue.Queue()
    laststate=""
    qu.put((puz, laststate))
    startstate=puz
    visited=[]
    #visited[puz] = puz

    while queue: 

        puz = qu.get()
        visited.append(puz)

        pos = puz[0].index('-')
        nebs = neighborcells(pos)
        #print(*visited)
        if puz[0] == "12345678-":

            break
        else:
            for i in nebs:

                swapped=swap(puz,i,pos)
                if swapped in visited:
                    pass #?
                else:
                    qu.put((swapped, puz[0]))
     #some sort of linked list like function to get the path of result to start
     #here

訪問節點示例(元組列表)

[('12-453786', ''), 
 ('1-2453786', '12-453786'), 
 ('12345-786', '12-453786'), 
 ('-12453786', '1-2453786'), 
 ('12-453786', '1-2453786'), 
 ('1524-3786', '1-2453786'), 
 ('1234-5786', '12345-786'), 
 ('12345678-', '12345-786')]

這個特定謎題的預期結果應該是 2 步

使用您當前的數據結構((nextState,prevState)元組數組),您絕對可以回到開始 state 的方式,但這不會非常有效,因為您每次都必須掃描整個列表才能找到 state重新尋找。 相反,您可以使用簡單的數據結構來存儲 BFS 圖。 這樣,當您到達末尾 state 時,您只需按照后面的鏈接指向初始 state。

同樣在您當前的代碼中,您沒有防范您之前訪問過的狀態,因此您可能會陷入無限循環的情況,而您的 while 循環將永遠不會中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM