【问题标题】:Is there a way to iterate through a list in a specific order of indexes in python有没有办法在python中以特定索引顺序遍历列表
【发布时间】:2019-10-13 18:40:50
【问题描述】:

好吧,自从我在 python 中工作以来已经有很长时间了。但基本上我正在做经典的 8 拼图问题,所以给定一个字符串,例如“12-453786”,我的程序将它解决为所需的“12345678-”。我目前正在使用广度优先搜索来解决它,并在下面的示例中存储访问过的节点和来自的节点。但是,要跟踪完成谜题所需的路径或移动量,我需要能够从已解决的元组开始,并通过我的元组列表追溯到开始状态

我正在考虑做某种 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 步

【问题讨论】:

  • 请提供您当前的代码
  • 已添加,对此感到抱歉。

标签: python list indexing linked-list tuples


【解决方案1】:

使用您当前的数据结构((nextState, prevState) 元组数组),您绝对可以回到开始状态,但这不会很有效,因为您每次都必须扫描整个列表才能找到您正在寻找的状态。相反,您可以使用简单的数据结构来存储 BFS 图。这样,当您到达最终状态时,您只需点击反向链接即可到达初始状态。

此外,在您当前的代码中,您并没有防范您之前访问过的状态,因此您可能会陷入无限循环的情况,而您的 while 循环将永远不会中断。

【讨论】:

  • 谢谢!当前 ``` 如果在访问中交换:通过 #? ``` 处理防止无限循环,我将研究使用数据结构。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 2021-03-09
  • 2021-07-14
  • 2022-08-17
  • 2019-10-14
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多