我必须从具有以下结构的文件构建图形:
1 80,982 163,8164 170,2620 145,648 200,8021 173,2069
第一个数字是顶点(1
),80
是具有权重982
的相邻顶点。我想从空格和逗号中删除该行。
我尝试使用strip()
和split(',')
,但我无法找到合适的格式来构建我的图表。
答案 0 :(得分:4)
您可以使用正则表达式轻松处理您的任务,如下所示:
>>> import re
>>> s = "1 80,982 163,8164 170,2620 145,648 200,8021 173,2069"
>>> re.findall(r'(\d+) (\d+),(\d+)', s) # pass your file content s as string
[('1', '80', '982'), ('8164', '170', '2620'), ('648', '200', '8021')]
说明:
findall
- 返回所有匹配模式的列表
\d+
- 匹配一个或多个数字
答案 1 :(得分:1)
如果我正确理解了数据的结构,每行包含一个顶点及其相邻顶点和权重对,则可以通过仅使用split
执行此操作,如下所示:
lines = "1 80,982 163,8164 170,2620 145,648 200,8021 173,2069"
graph = {}
for line in lines.split('\n'):
vertex, *neighbors = line.split()
graph[vertex] = [tuple(neighbor.split(','))
for neighbor in neighbors]
结果是一个字典,其中包含顶点作为键,以及相邻顶点列表 - 权重元组作为值。