我正在读取具有代表图形及其邻接表的数字的文件。第一个数字是顶点,其余的是邻居。如何从python中的文件读取图形以获取其邻接列表?
假设如果我有存储在字符串空间分隔的数字串:1 2 3 4
我如何拆分它使得x = 1且y是一个列表[2,3,4]?
y=[]
g=open('graph','r')
for line in g:
x,y=line.split()
我正在读取具有代表图形及其邻接表的数字的文件。第一个数字是顶点,其余的是邻居。如何从python中的文件读取图形以获取其邻接列表?
假设如果我有存储在字符串空间分隔的数字串:1 2 3 4
我如何拆分它使得x = 1且y是一个列表[2,3,4]?
y=[]
g=open('graph','r')
for line in g:
x,y=line.split()
在Python 3,你可以这样做:
x, *y = line.split()
但在Python 2,你需要拆分至一个可变第一,然后分配给x
和y
:
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])
下面是一个使用溶液Namedtuple [1]将数据存储在o中面向对象的方式。
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
试第一邻接表到第一行拆分成一个变量,然后分配x和y,也许使用切片。 – rocksportrocker