首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Python列表中的图中移除重复边

从Python列表中的图中移除重复边
EN

Stack Overflow用户
提问于 2016-07-25 02:30:46
回答 3查看 3.2K关注 0票数 9

我的程序返回一个元组列表,它表示图的边,格式为:

代码语言:javascript
复制
[(i, (e, 130)), (e, (i, 130)), (g, (a, 65)), (g, (d, 15)), (a, (g, 65))]

因此,(i,(e,130))表示'i‘与'e’相连,距离为130个单位。

同样,(e,(i,130))表示'e‘与'i’相连,距离为130个单位。因此,从本质上讲,这两个元组表示相同的东西。

我如何从这个列表中删除它们中的任何一个?所需输出:

代码语言:javascript
复制
[(i, (e, 130)), (g, (a, 65)), (g, (d, 15))]

我试着写了一个equals函数。这会有什么帮助吗?

代码语言:javascript
复制
def edge_equal(edge_tuple1, edge_tuple2):
    return edge_tuple1[0] == edge_tuple2[1][0] and edge_tuple2[0] == edge_tuple1[1][0]
EN

回答 3

Stack Overflow用户

发布于 2016-07-25 02:44:27

重建每条边以采用其替代形式,并检查该替代形式是否已在新的集合中。如果不是,则添加到集合中:

代码语言:javascript
复制
lst = [('i', ('e', 130)), ('e', ('i', 130)), ('g', ('a', 65)), ('g', ('d', 15)), ('a', ('g', 65))]

r = set()
for e, v in lst:
    if (v[0], (e, v[1])) in r:
        continue
    r.add((e, v))

print(list(r))
# [('i', ('e', 130)), ('g', ('a', 65)), ('g', ('d', 15))]
票数 3
EN

Stack Overflow用户

发布于 2016-07-25 02:44:36

最简单的解决方案是编写迭代器,并检查它们的相等性:

代码语言:javascript
复制
def edge_equal(edge_tuple1, edge_tuple2):
        return edge_tuple1[0] == edge_tuple2[1][0] and edge_tuple2[0] == edge_t\
uple1[1][0]

new = []

for i in range(len(graph)):
    found_equal = False
    for e in range(i,len(graph)):
        if edge_equal(graph[i],graph[e]):
            found_equal = True
            break
    if not found_equal:
        new.append(graph[i])

print new
票数 2
EN

Stack Overflow用户

发布于 2016-07-25 02:48:34

代码语言:javascript
复制
edges = [(i, (e, 130)), (e, (i, 130)), (g, (a, 65)), (g, (d, 15)), (a, (g, 65))]

for each in edges:
    try:
        edges.remove((each[1][0], (each[0], each[1][1])))
    except ValueError:
        pass

反转向量并在遍历时将其移除

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38555385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档