首页 > 解决方案 > python“zip”和for循环创建一个对象

问题描述

我刚刚在 python 中学习了 zip 命令,我想利用它进行拓扑排序。但是,我的代码仍然存在一些问题。

我有这个用于拓扑排序的 python 脚本:

from collections import defaultdict


class Graph:
    def __init__(self, directed=False):
        self.graph = defaultdict(list)
        self.directed = directed

    def addEdge(self, frm, to):
        self.graph[frm].append(to)

        if self.directed is False:
            self.graph[to].append(frm)
        else:
            self.graph[to] = self.graph[to]

    def topoSortvisit(self, s, visited, sortlist):
        visited[s] = True

        for i in self.graph[s]:
            if not visited[i]:
                self.topoSortvisit(i, visited, sortlist)

        sortlist.insert(0, s)

    def topoSort(self):
        visited = {i: False for i in self.graph}

        sortlist = []

        for v in self.graph:
            if not visited[v]:
                self.topoSortvisit(v, visited, sortlist)

我也有我的 csv 文件:

name;id;linked;distance;type
A;1;4;60807.66;N
B;2;3;50949.67;N
C;3;4;39067.50;N
D;4;5;48169.93;N
E;5;0;0;N

正如我刚刚从另一篇文章中了解到的那样,我执行以下操作:

dfm = pd.read_csv(fname, sep=';',index_col=None, header = 0)
zipl  = zip(dfm['id'], dfm['linked'])

根据 dfm['id'], dfm['linked'] 我想对它们进行排序。因此,我将 Graph 对象创建为:

links = Graph(directed=True)

并对它们进行排序:

[links.addEdge(row) for row in zipl]

但是,我收到以下错误:

TypeError: addEdge() missing 1 required positional argument: 'to' 

如果我这样做,我没有问题:

links.addEdge(4, 5)

这是关于数据类型的问题吗?

标签: pythonsortingobjectzipcycle

解决方案


推荐阅读