Python 查找具有相同边属性的所有顶点

Python 查找具有相同边属性的所有顶点,python,graph,igraph,Python,Graph,Igraph,我想通过使用Igraph查找共享相同边属性的所有顶点(顶点id)(这样可以有很多这样的顶点)。当我想找到“道路”上的所有“村庄”(图中的顶点),比如说“路线69”(边属性),这将非常方便 在Igraph中有没有一种简单的方法可以做到这一点?也许我把它复杂化了 实际上我需要的是相反的:g.es.选择(_in=g.vs[2:5])或 >>> men = g.vs.select(gender="m") >>> women = g.vs.select(gender="

我想通过使用Igraph查找共享相同边属性的所有顶点(顶点id)(这样可以有很多这样的顶点)。当我想找到“道路”上的所有“村庄”(图中的顶点),比如说“路线69”(边属性),这将非常方便

在Igraph中有没有一种简单的方法可以做到这一点?也许我把它复杂化了

实际上我需要的是相反的:
g.es.选择(_in=g.vs[2:5])

>>> men = g.vs.select(gender="m")
>>> women = g.vs.select(gender="f")
>>> g.es.select(_between=(men, women))
因为我知道边属性,但不知道顶点

我将选择边,并希望它将返回所有相关的顶点


也许我现在只是累了,但我找不到解决这个问题的方法。如果有人以正确的方式帮助我,我将不胜感激。或者,也许有一种方法我在文档中遗漏了。闻起来好像有一个非常简单的方法提前感谢您的建议

您应该能够执行以下操作:

r69edges = g.es.select(name_eq='Route69')  #Select all edges where name=='Route69'
sg = r69edges.subgraph()  #Create a subgraph containing only the selected edges (and attached vertices)
village_verts = sg.vs.select(name_eq='villages')  #Select the vertices where name=='villages'
这假设“村庄”和“路线69”存储在顶点和边上名为“名称”的属性中。。。适当调整以匹配您的属性

当然-如果需要,您可以将所有内容压缩成一行:

village_verts = g.es.select(name_eq='Route69').subgraph().vs.select(name_eq='villages')

不确定这是否是最有效的方法(尽管我在文档中没有看到任何快捷方式),但它应该能让您了解您的目的。

首先,选择管线69上的所有边:

edges = g.es.select(name="Route69")
然后迭代选定边并收集顶点的端点:

vertices = set()
for edge in edges:
    vertices.update(edge.tuple)
这将为您提供一个集合,其中包含至少一条边上名称为
Route69
的所有顶点的顶点ID。如果需要VertexSeq,只需执行以下操作:

vertices = g.vs[sorted(vertices)]

再次感谢塔马斯。这个解决方案很有效,实施起来也很简单。感谢您的贡献。可能不是最有效的,但效果也很好。