Python:列之间有三个不同的分隔符,列到列表,最快的方式

时间:2012-05-29 16:23:07

标签: python delimiter

我有三个不同分隔符的数据(下面)(第一个有数字空格,第二个空格到数字,最后一列是空格,然后是数字的标签)我希望能够生成包含每列连续值的列表。

 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644

我尝试了一些东西。转换成一个字符串,看看我是否可以这样解析它,但转换似乎有点啰嗦,我想知道是否有人知道更快的方式。理想的输出是

list 1 = [8000.5, 8001.0, 8001.5 ...]
list 2 = [16745, 16745, 16745, ...]
list 3 = [0.1257, 0.1242, 0.1565, ...]

谢谢!

4 个答案:

答案 0 :(得分:1)

只需使用.split();它将占用任意数量的空白并将其拆分(完全忽略前导和尾随空格):

>>> ex = ' 8000.5   16745     0.1257'
>>> ex.split()
['8000.5', '16745', '0.1257']

如果您需要花车而不是字符串,只需使用float()map应用于每个值:

>>> ex = ' 8000.5   16745     0.1257'
>>> map(float, ex.split())
[8000.5, 16745.0, 0.1257]

答案 1 :(得分:1)

使用split()

strs = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644"""

list_col= map(list,zip(*(map(float,x.split()) for x in strs.split('\n'))))

print(list(list_col))

输出列列表

[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0], [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0], [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]

答案 2 :(得分:0)

txt = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644 """

data = zip(*((float(s) for s in row.split()) for row in txt.split('\n')))

结果

[(8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0),
 (16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0),
 (0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644)]

答案 3 :(得分:0)

另一种方法(s是初始字符串):

>>> [map(float, col) for col in zip(*map(str.split, s.splitlines()))]
[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0],
 [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0],
 [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]