从文件创建邻接列表

时间:2016-04-12 11:22:00

标签: python-3.x

我的任务是阅读文件的内容,然后从中创建一个邻接列表。

每一行代表图表中的一条边,文件如下所示:

0 1 
2 1 
0 2 
1 3 

到目前为止,我已阅读所有内容,现在有一个包含以下内容的列表:

  

[[' 0',' 1'],[' 2',' 1'],[' 0& #39;,' 2'],[' 1',' 3']]

我的问题是如何使用上面的内容来获得如下所示的邻接列表:

  

[[1; 2]。 [0; 2; 3]; [1; 0]; [1]]

请注意:Python语言很新,我不允许导入任何内容。

1 个答案:

答案 0 :(得分:-1)

以下解决方案使用dictionary

l = [['0', '1'], ['2', '1'], ['0', '2'], ['1', '3']]
adjacencies = dict()
for edge in l:
    x, y = int(edge[0]), int(edge[1])
    if x not in adjacencies: adjacencies[x] = set()
    if y not in adjacencies: adjacencies[y] = set()
    adjacencies[x].add(y)
    adjacencies[y].add(x)
print( [sorted(adjacencies[_]) for _ in sorted(adjacencies)])

但是,更优雅的解决方案是在解析输入文件时直接构造字典adjacencies(在以下示例中为test.txt):

def get_adjacency_list(filename):
    adjacencies = dict()
    with open(filename) as infile:
        for line in infile:
            x, y = [int(_) for _ in line.strip().split()]
            if x not in adjacencies: adjacencies[x] = set()
            if y not in adjacencies: adjacencies[y] = set()
            adjacencies[x].add(y)
            adjacencies[y].add(x)
   return [sorted(adjacencies[_]) for _ in sorted(adjacencies)]

print(get_adjacency_list('test.txt'))

请注意,字典adjacencies的值属于set类型,由于排序(通过内置方法sorted())而转换为列表。

IF 您将被允许导入您应该使用defaultdict而不是普通Python词典的任何内容。