如何为该问题编写代码?

时间:2019-08-04 13:46:22

标签: python list optimization

我给出了多个顶点$ 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)])

2 个答案:

答案 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/