我给出了多个顶点$ n $和一组边$ E $。
我的目标是编写一个返回$ n $条目列表的函数,第k个位置$(k = 0,...,n-1)$第k个邻域$ [k ] = {w∈V:(k,w)\ in E \ cupΔ} $,代表无序节点列表。
我的问题是,我不知道如何解决此问题。 我的书面代码是1)不能正常工作,第二种方法减慢速度。
我希望你们中的某人能帮助我一点。顺便说一句Python是我的第一语言,并且自2个星期以来我一直在学习它,所以请不要太刻苦:)
def get_classes(n,E):
list = []
b = []
a = []
for i in range(n):
b.append(i)
for i in b:
for j in E:
if i ==j[0]:
a.append(j[1])
if bool(a) == False:
list.append(i)
else:
list.append(a)
print(list)
get_classes (4 ,[( 1 , 2 ),(2,1),(1,3)])
答案 0 :(得分:0)
首先,您应该知道list
是Python内置的,并且应该避免分配具有该名称的对象。
第二,不需要您的第一个for循环。您使用b
中的元素创建列表range(n)
,然后再次遍历那些完全相同的元素。仅拥有for i in range(n):
而根本不创建b
就足够了。
这可以解决您提出的问题:
def get_classes(n, edges):
results = []
for node in range(n):
result = set()
for edge in edges:
if node == edge[0]:
result.add(edge[1])
results.append(list(result - {node}))
return results
results = get_classes(4, [(1, 2), (2, 1), (1, 3)])
print(results)
输出:
[[], [2, 3], [1], []]
答案 1 :(得分:0)
为此,我将使用python中可用的Networkx库。
import networkx as nx
G = nx.Graph()
G.add_edge(1, 2)
G.add_edge(2, 1)
G.add_edge(1, 3)
G.add_node(0)
result = []
for node in sorted(G.nodes()):
result.append(list(G.neighbors(node)))
print(result)
输出:
[[], [2, 3], [1], [1]]
您可以使用以下命令安装此软件包: pip install networkx
检查此站点: https://networkx.github.io/