Python:如何将特定数量的字符上的字符串切成列表?

时间:2012-11-01 17:15:04

标签: python slice

我正在阅读一行文本数据,我想将该行拆分为值列表。例如,该行有四个数字,每个数字分配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”的方式吗?

提前感谢您的帮助。

2 个答案:

答案 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]