Python:从理解中删除空列表

标签 python list-comprehension

我正在实现 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 就不会失败,但是有没有更好的方法来编写它 理解,因此不存在空列表。

最佳答案

这是一个想法:

minval = [float('+inf')]
min(A[x] + min([b for a, b in G[x] if a not in X] + minval) for x in X)
=> 40

诀窍?确保最里面的 min() 始终有一个可用的值,即使它是一个虚拟值:一个正无穷大,因为任何东西都会比它小。这样,最外层的 min() 在计算最小值时将忽略 inf 值(对应于空列表)。

关于Python:从理解中删除空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18156545/

相关文章:

javascript - 将带有ajax的数组发送到我在django中的python函数

Python2.7 (numpy) 将 3-d numpy 数组附加到空数组时保持数组的形状

python - 在一行中将数​​字减半

haskell - Haskell 中特定列表理解的解释

python - 如何在 django 中使 @cached_property 无效

python - 排除正则表达式中的字符串

python - dir() 和 __dir__ 有什么区别?

Python:列表理解,如果 x 存在则执行 f(x)?

python - 列表理解比较两个不同的列表

Python计算字符串中的字符数