我的程序返回一个元组列表,它表示图的边,格式为:
[(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个单位。因此,从本质上讲,这两个元组表示相同的东西。
我如何从这个列表中删除它们中的任何一个?所需输出:
[(i, (e, 130)), (g, (a, 65)), (g, (d, 15))]
我试着写了一个equals函数。这会有什么帮助吗?
def edge_equal(edge_tuple1, edge_tuple2):
return edge_tuple1[0] == edge_tuple2[1][0] and edge_tuple2[0] == edge_tuple1[1][0]
发布于 2016-07-25 02:44:27
重建每条边以采用其替代形式,并检查该替代形式是否已在新的集合中。如果不是,则添加到集合中:
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))]
发布于 2016-07-25 02:44:36
最简单的解决方案是编写迭代器,并检查它们的相等性:
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
发布于 2016-07-25 02:48:34
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
反转向量并在遍历时将其移除
https://stackoverflow.com/questions/38555385
复制相似问题