在字典中添加子列表的值



编译完上面的单元格后,您应该能够编译下面的单元格并获得所需的输出。

这应该返回36。

基本上是A、B、C、D的边权重相加。有些边被列了两次,如果已经考虑了,我们不应该为这些边添加权重。例如[A,B]和[B,A],因为它们是相同的边等。

这是我到目前为止无法工作的代码:

def infty(graph):
sum = 0
results = []
for a in graph:
for a in a:
results.append(graph[a])
sum = sum + results[a]
print (sum)

如果图是对称的,并且其描述是完整和一致的(即,对于每个权重w_ab,都有一个相等的w_ba(:

def infty(g):
return 1 + sum([e[1] for lst in g.values() for e in lst]) / 2

示例:

g = {'A': [['B', 10], ['D', 5]], 'B': [['A', 10], ['C', 5]],
'C': [['B', 5], ['D', 15]], 'D': [['C', 15], ['A', 5]]}
>>> infty(g)
36.0

解释

  • sum([e[1] for lst in g.values() for e in lst])是简单的双列表理解(具有两个for循环的列表理解(
  • 第一个for循环:for lst in g.values()迭代g(即dict(的值,例如:[['B', 10], ['D', 5]],然后是[['A', 10], ['C', 5]],等等(
  • 第二个for循环:for e in lst迭代每个列表lst中的每个元素,例如['B', 10]['D', 5]
  • 使用CCD_ 14是指每个边缘的权重

Pierre的答案更优雅,但与您的第一个函数类似,这似乎对我有效:

def infty(graph):
sum_ = 0
for node in graph:
for node_2 in graph[node]:
sum_ += node_2[1]
return (sum_)/2 +1

在你的例子中,图是一本字典。节点计数两次,这就是sum_除以2的原因。这只适用于无向图的情况。

相关内容

  • 没有找到相关文章

最新更新