我的任务是阅读文件的内容,然后从中创建一个邻接列表。
每一行代表图表中的一条边,文件如下所示:
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语言很新,我不允许导入任何内容。
答案 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词典的任何内容。