如何在python中使用列表进行拓扑排序

2024-09-30 12:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始写我的学士论文,我正在尝试创建一个算法,根据过去的学习成绩提供个性化的选课建议。我正在学习和使用python,到目前为止,我已经创建了一个课程列表和一个先决条件列表,如下所示:

[['CS101'], ['CS105'], ['CS106', 'CS105'], ['CS107'], ['CS130'], ['CS151', 'CS105', 'MATH101'], ['CS180'], ['CS201', 'CS151'], ['CS205', 'CS105'], ...]

例如,为了学习CS101,你不需要学习任何其他课程,但是要学习CS106,你必须已经学习了CS105。现在,我必须进行拓扑排序,尽管我从堆栈溢出中提供的类似问题中找到了一些代码,但它不起作用。解决方案是这样的(我只修改了my_lists的一部分,以便为我的代码工作):

        import networkx as nx

        my_lists = data.prerequisites
        my_graph = nx.DiGraph()
        for path in my_lists:
            my_graph.add_nodes_from(path)
            my_graph.add_path(path)

        ts = nx.topological_sort(my_graph)
        print(ts)

其中data.preditions是在另一个python文件(data.py)中创建的列表。问题是,当我运行此命令时,会出现以下错误:

AttributeError: 'DiGraph' object has no attribute 'add_path'

我搜索了networkx 2.4的文档,但没有任何迹象表明它们替换了add_path()。对于这个错误有一个解决方案,但它不再有效,因为该解决方案是在2011年给出的,并且add_path()在2019年被完全删除。我试图使用互联网上的其他例子,但我找不到一个合适的列表。我应该尝试找到一个完全不同的方法,还是有一个像这样简单的小解决方案?因为他们中的很多我都不能真正理解


Tags: path代码add列表datamy解决方案lists

热门问题