如何解决在字典中添加子列表的值
编译上述单元格后,您应该能够编译以下单元格并获得所需的输出。
这应该返回 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',['C','C': [['B',5],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',5]]
,然后是[['A',5]]
等.); - 第二个 for 循环:
for e in lst
迭代每个列表lst
中的每个元素,例如['B',10]
、['D',5]
等 - 使用
e[1]
指的是每条边的权重。
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 的原因。这仅适用于无向图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。