从元组中提取边集

用户9713961

我创建了以下程序。它采用一个输入G,该输入G由图形的顶点以及边缘和相应的边缘权重组成。该程序的目的是仅提取边缘

def edges(G):     
    E =[]     
    for i in G[1]:         
        E.append(i[0])     
    return E  
print (edges(G))

在以下输入

G = [({'a', 'b'}, 4), ({'a', 'c'}, 6), ({'a', 'd'}, 8), ({'b', 'e'}, 1) ,
      ({'b', 'f'}, 9), ({'c', 'f'}, 3), ({'d', 'g'}, 7), ({'d', 'h'}, 0)]

产生以下输出:

[{'a', 'b'}, {'a', 'c'}, {'a', 'd'}, {'e', 'b'}, {'f', 'b'}, {'f', 'c'}, {'g', 'd'}, {'h', 'd'}]

我想得到的输出是:

[{'a', 'b'}, {'a', 'c'}, {'a', 'd'}, {'b', 'e'}, {'b', 'f'}, {'c', 'f'}, {'d', 'g'}, {'d', 'h'}]

谁能解释为什么我提取的元组会重新排序?

pp

Aset无序集合您所要求的是不可能的。

最好的办法是使用有序集合,例如listtuple下面是一个例子。

res = [tuple(sorted(x[0])) for x in G]

print(res)

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'e'),
 ('b', 'f'), ('c', 'f'), ('d', 'g'), ('d', 'h')]

从功能上讲,这也是可能的,但由于Python没有本机函数组成,因此很混乱。对于合成,您可以使用3rd party library toolz

from operator import itemgetter
from toolz import compose

res = list(map(compose(tuple, sorted, itemgetter(0)), G))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章