python - 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)
这是关于数据类型的问题吗?
解决方案
推荐阅读
- javascript - 反应:状态的布尔标志更新不够快
- c# - 如何在 Unity 中访问子对象中的车轮对撞机
- python - 筛算法的时间复杂度
- python - pygame中的文本框
- r - 为什么在控制台中成功运行的代码在 Rmarkdown 块中返回“错误:不完整的表达式”?
- python - Django Rest Framework + psycopg2:InterfaceError:游标已关闭
- python - 如何在 python 中 sha256 原始位?
- python - RuntimeError:字典在迭代期间使用 defaultdict() 改变了大小
- java - 如何根据按下的次数改变按钮的外观?
- python - 无法通过 nipype 进行 FLIRT 注册(google colab)