我以前也被这个绊倒了。这里的瓶颈实际上是
if neighbor in closedlist。
该in语句是如此易于使用,你忘记了它是线性搜索,而当你在列表上进行线性搜索时,它的添加速度很快。你可以做的是将
closedlist转换为set对象。这样可以保留其项目的哈希值,因此in操作员的效率比列表高得多。但是,列表不是可散列的项目,因此你必须将配置更改为元组而不是列表。
如果的顺序对
closedlist算法至关重要,则可以为in运算符使用一个集合,并为结果保留一个并行列表。
我尝试了一个简单的实现,包括
aaronasterling的
namedtuple技巧,它在第一个示例中的执行时间为0.2秒,在第二个示例中的执行时间为2.1秒,但是我没有尝试验证第二个较长示例的结果。



