我正在阅读一行文本数据,我想将该行拆分为值列表。例如,该行有四个数字,每个数字分配5个空格,因此如果数字是18,295,-9999和1780,则原始行将如下所示(^字符表示行的开头和结尾,不包括在内在实际输入数据中):
^ 18 295-9999 1780^
我想将该行拆分为其实际组件值的列表:
[18, 295, -9999, 1780]
我知道列表应包含的值的数量(在上面的示例中是4),并且我确切地知道每个值在字符串中占用多少空格(在上面的示例中为5)。我可以创建一个循环来执行此拆分,如下所示:
values = []
for i in range(4):
values.append(line[i*5:5])
有更高效或更“Pythonic”的方式吗?
提前感谢您的帮助。
答案 0 :(得分:8)
使用切片......
>>> [int(s[i:i+5]) for i in xrange(0, len(s), 5)]
[18, 295, -9999, 1780]
或者 - 如果你真的想要,有些人会发现re
更具可读性......(只是将其作为参考的替代品 - 不要开枪!)
>>> map(int, re.findall('.{5}', s))
[18, 295, -9999, 1780]
答案 1 :(得分:1)
这是另一种可能的解决方案:
x = ' 18 295-9999 1780'
def split_up(x):
return map(int, x.replace('-', ' -').split())
结果
>>> split_up(x)
[18, 295, -9999, 1780]