我有三个不同分隔符的数据(下面)(第一个有数字空格,第二个空格到数字,最后一列是空格,然后是数字的标签)我希望能够生成包含每列连续值的列表。
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, ...]
谢谢!
答案 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]]