如何从python中的文件中读取图形以获取其邻接列表?

时间:2013-04-15 09:49:54

标签: python

我正在从一个文件中读取,该文件的数字代表图形及其邻接列表。第一个数字是顶点,其余数字是邻居。

假设我在字符串中存储了一串以空格分隔的数字:1 2 3 4。

如何拆分它,使得x = 1,y是列表[2,3,4]?

         y=[]
         g=open('graph','r')
         for line in g:
             x,y=line.split()

2 个答案:

答案 0 :(得分:3)

在Python 3中你可以这样做:

x, *y = line.split()

但在Python 2中,您需要先拆分为一个变量,然后分配给xy

values = line.split()
x, y = values[0], values[1:]

如果这些必须是整数而不是字符串,则需要先将值映射到int()

x, *y = map(int, line.split())

或者,再次使用Python 2:

values = map(int, line.split())
x, y = values[0], values[1:]

Python 3演示:

>>> x, *y = '1 2 3 4'.split()
>>> x, y
('1', ['2', '3', '4'])
>>> x, *y = map(int, '1 2 3 4'.split())
>>> x, y
(1, [2, 3, 4])

Python 2:

>>> values = '1 2 3 4'.split()
>>> x, y = values[0], values[1:]
>>> x, y
('1', ['2', '3', '4'])
>>> values = map(int, '1 2 3 4'.split())
>>> x, y = values[0], values[1:]
>>> x, y
(1, [2, 3, 4])

答案 1 :(得分:0)

这是使用Namedtuple [1]以面向对象的方式存储数据的解决方案。

Namedtuple是一个用于创建用于存储数据的小类的生成器。生成的类可以自己打印,这对于调试很有用。但是这些对象是不可变的,要改变任何必须创建新对象的东西。

from collections import namedtuple

VertexInfo = namedtuple("VertexInfo", "vert, adj")

graph = []
g = open('graph','r')
for line in g:
   nums = line.split()
   info = VertexInfo(vert=nums[0], adj=nums[1:])
   graph.append(info)

您可以使用以下内容获取第一个顶点编号:

graph[0].vert

第一个邻接列表

graph[0].adj

[1] http://docs.python.org/2/library/collections.html#collections.namedtuple