元组G包含边集,顶点集和边的权重。
#Weighted Graph
G = [['a', 'b' , 'c' , 'd']
[({'a', 'b'}, 4), ({'a', 'c'}, 6), ({'a', 'd'}, 8)]
我试图恢复边缘的重量,给定边缘。例如,对于边缘{'a','b'},我尝试返回值4.是否可以搜索{'a','b'}并返回此值?
答案 0 :(得分:2)
您可以通过循环G
内的第二个列表来完成此操作,但基本上list不是用于表示图形的正确数据结构。
作为一种更优化和Pythonic方式,您可以将它们保存在字典中,并使用简单的索引访问每个边缘。
但是你应该注意一件事。 set
不可清除,您必须使用tuple
或其他可用的迭代器frozenset
用于保留边缘作为字典键。
In [20]: nodes, edges = G[0], {tuple(i): j for i, j in G[1]}
In [21]: edges
Out[21]: {('a', 'b'): 4, ('a', 'c'): 6, ('a', 'd'): 8}
In [22]: edges[('a', 'b')]
Out[22]: 4
请注意,这里我将您当前的数据转换为字典,但如果您自己生成此数据,最好在该级别执行此操作,并在创建此类嵌套列表之前首先创建字典。< / p>
答案 1 :(得分:0)
您可以将每个边的起点和终点存储在两个元组中:E1和E2。另外,你可以将每个边缘的权重存储到元组W中,并通过迭代E1和E2的元素来搜索适当的边缘,最后你可以使用W元组访问适当的权重。
G = ('a', 'b', 'c', 'd')
E1 = ('a', 'a', 'a')
E2 = ('b', 'c', 'd')
W = (4, 6, 8)
for i in range(len(E1)):
if E1[i] == 'a' and E2[i] == 'b':
print(W[i])