我正在实施 dijkstras 算法来计算最短路径。我的问题是是否有一种更简洁的方法来实现以下理解(即没有if [b for a,b in G[x] if a not in X]!=[]]
附加到最后)。
在下面,G 是一个图,其中它的键是图节点,每个节点都有一个表示其连接边的元组列表。所以每个元组都包含信息:(连接节点,到连接节点的距离)。X 是算法已经查看过的一组节点,A 是将那些已经找到的节点映射到距起始节点最短距离的字典,在本例中为节点 1。
更新:对不起,我给出了一个有效的例子,如果理解的最后一部分被删除,这是一个不起作用的例子。
G = {1: [(2, 20), (3, 50)], 2: [(3, 10), (1, 32)], 3: [(2, 30), (4, 10)], 4: [(1, 60)]}
X = {1,2,3}
A = {1: 0, 2: 20, 3:30}
mindist = min([A[x] + min([b for a,b in G[x] if a not in X]) for x in X if [b for a,b in G[x] if a not in X]!=[]])
问题是如何将 mindist 写成可以处理的理解min([[],[some number],[])
。
最后一部分,
if [b for a,b in G[x] if a not in X]!=[]]
只是删除了空列表,所以 min 不会失败,但是有没有更好的方法来编写该理解,所以没有空列表。