2017-02-09 15 views
0
vertice = input("enter the vertices: ") 
vertice = [x.strip(' ') for x in vertice.split(',')] 

edge = input("enter the edges: ") 
edge = [x.strip(' ') for x in edge.split(',')] 

print("Number of vertices: ", len(vertice)) 
print("Number of edges: ", len(edge) 

在这里,我想找到像给出的输入程度序列: A,B,C为顶点 和A-B,B-C,C-A的边缘。我如何用这种类型的输入来做到这一点? 寻找像[2,2,2]如何找到图中给定的输入顶点和边度序列?

+0

当你需要一个图数据结构。我会强烈建议创建更复杂的图形结构,而不是将边和顶点存储在列表中。 – EngineeredBrain

回答

1

的输出可以使用Counter计数相关联的每个顶点的边缘:

>>> from collections import Counter 
>>> vertices = ['a', 'b', 'c', 'd'] 
>>> edges = ['a-b', 'a-c', 'b-c', 'd-a'] 
>>> degree = Counter(vertex for edge in edges for vertex in edge.split('-')) 
>>> [degree[vertex] for vertex in vertices] 
[3, 2, 2, 1] 

在上述Counter构造函数接受中的项目可迭代,并返回一个dict状物体这里独特的项是键和值分别计数。

>>> items = list(vertex for edge in edges for vertex in edge.split('-')) 
>>> items 
['a', 'b', 'a', 'c', 'b', 'c', 'd', 'a'] 
>>> degree = Counter(items) 
>>> degree 
Counter({'a': 3, 'c': 2, 'b': 2, 'd': 1}) 

由于Counter的顺序是随机的,我们需要使用列表中理解到顶点迭代,以产生在同一顺序的度列表。

>>> [degree[vertex] for vertex in vertices] 
[3, 2, 2, 1] 
+0

谢谢!高度赞赏。 –

0

您可以随时使用networkx软件包 - 该软件包为您提供了大部分(如果不是全部)您希望操作图形的功能,假设你有一个径向连接的4个节点的路径,你会发现这样的程度:

from networkx import nx 
G = nx.Graph() 
G.add_path([0,1,2,3]) 
deg=G.degree(G.nodes()).values() 
print("number of vertices: ",G.number_of_nodes()) 
print("number of edges: ",G.number_of_edges()) 
print("degree list: ",sorted(deg)) 

>>number of vertices: 4 
>>number of edges: 3 
>>degree list: [1, 1, 2, 2] 
相关问题