将文件元素读入相邻lis

2024-09-29 17:21:25 发布

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

我有一个文件包含:

0 1 95.21
0 2 43.8
1 3 10.4
2 5 67.1

我正试图从中创建一个邻接列表。其中,前两行表示彼此连接的顶点,第三列表示边的长度。我希望python生成这样的输出:

^{pr2}$

我设法编写了生成邻接列表的代码:

filename2 = open("list.txt", "r", encoding = "utf-8")
efile = filename2

adjList = [0] * 10
for i in range(10):
    adjList[i] = []

for line in efile:
    edgeEndpoints = line.split()
    adjList[int(edgeEndpoints[0])].append(int(edgeEndpoints[1]))
    adjList[int(edgeEndpoints[1])].append(int(edgeEndpoints[0]))
print(adjList)

给我

[[1,2],[0,3],[0,5]]

但我想不出一个办法来包括边长。而不是我想要的[1,2]

[[[1, 95.21],[2, 43.8]],[[0, 95.21],[3, 10.4]],[[0, 43.8],[5, 67.1]]

希望你能帮忙。在


Tags: 文件in列表forlineint顶点append
2条回答

在这个解决方案中,我尽量避免预先知道数据中有多少节点。在

>>> from collections import defaultdict
>>> adj_list = defaultdict(set)
>>> with open('list.txt') as f:
      for line in f:
        start,end,length = line.rstrip().split()
        adj_list[int(start)].add((int(end),float(length)))
        adj_list[int(end)].add((int(start),float(length)))

结果如下

^{pr2}$

您应该append同时包含整数和距离的append而不是append一个list。在

filename2 = open("list.txt", "r", encoding = "utf-8")
efile = filename2

adjList = [0] * 10
for i in range(10):
    adjList[i] = []

for line in efile:
    edgeEndpoints = line.split()
    adjList[int(edgeEndpoints[0])].append([int(edgeEndpoints[1]), float(edgeEndpoints[2])])
    adjList[int(edgeEndpoints[1])].append([int(edgeEndpoints[0]), float(edgeEndpoints[2])])
print(adjList)

输出:

^{pr2}$

但是,我会选择@BoarGules的解决方案,而不是这样,因为它是干净的,并且适用于这种格式的所有可能的输入。在

相关问题 更多 >

    热门问题