我正在从一个文件中读取,该文件具有代表图形及其邻接列表的数字。第一个数字是顶点,其余的是邻居。
假设我有一串以空格分隔的数字存储在字符串中:1 2 3 4。
我如何拆分它使得 x=1 并且 y 是一个列表 [2,3,4]?
y=[]
g=open('graph','r')
for line in g:
x,y=line.split()
我正在从一个文件中读取,该文件具有代表图形及其邻接列表的数字。第一个数字是顶点,其余的是邻居。
假设我有一串以空格分隔的数字存储在字符串中: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
and 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])
蟒蛇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] 以面向对象的方式存储数据的解决方案。
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