在元组内搜索集合

时间:2018-04-28 11:50:06

标签: python python-3.x

元组G包含边集,顶点集和边的权重。

#Weighted Graph
G = [['a', 'b' , 'c' , 'd']
     [({'a', 'b'}, 4), ({'a', 'c'}, 6), ({'a', 'd'}, 8)]

我试图恢复边缘的重量,给定边缘。例如,对于边缘{'a','b'},我尝试返回值4.是否可以搜索{'a','b'}并返回此值?

2 个答案:

答案 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])