在字典中添加子列表的值
adding values of sub lists inside dictionary
编译上述单元格后,您应该能够编译以下单元格并获得所需的输出。
这应该return36.
基本上它添加了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]
等
- using
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
如您的示例所示,graph 是一本字典。节点被计算两次,这就是 sum_
除以 2 的原因。这仅适用于无向图的情况。
编译上述单元格后,您应该能够编译以下单元格并获得所需的输出。
这应该return36.
基本上它添加了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]
等 - using
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
如您的示例所示,graph 是一本字典。节点被计算两次,这就是 sum_
除以 2 的原因。这仅适用于无向图的情况。