Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何将特定数量的字符上的字符串切片到列表中?_Python_Slice - Fatal编程技术网

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

Python:如何将特定数量的字符上的字符串切片到列表中?,python,slice,Python,Slice,我正在读取一行文本数据,我想将该行拆分为一个值列表。例如,该行有四个数字,每个数字分配了5个空格,因此,如果数字为18、295、-9999和1780,则原始行将如下所示(其中^个字符表示行的开始和结束,不包括在实际输入数据中): 我想将该线拆分为其实际组件值的列表: [18, 295, -9999, 1780] 我知道列表应该包含的值的数量(在上面的示例中为4),并且我确切地知道每个值在字符串中占用了多少空间(在上面的示例中为5)。我可以创建一个循环来进行拆分,如下所示: values = [

我正在读取一行文本数据,我想将该行拆分为一个值列表。例如,该行有四个数字,每个数字分配了5个空格,因此,如果数字为18、295、-9999和1780,则原始行将如下所示(其中^个字符表示行的开始和结束,不包括在实际输入数据中):

我想将该线拆分为其实际组件值的列表:

[18, 295, -9999, 1780]
我知道列表应该包含的值的数量(在上面的示例中为4),并且我确切地知道每个值在字符串中占用了多少空间(在上面的示例中为5)。我可以创建一个循环来进行拆分,如下所示:

values = []
for i in range(4):
    values.append(line[i*5:5])
有没有更有效或更“Pythonic”的方法

提前感谢您的帮助。

使用切片

>>> [int(s[i:i+5]) for i in xrange(0, len(s), 5)]
[18, 295, -9999, 1780]
或者-如果你真的想,有些人会觉得
re
更具可读性。。。(只是将此作为参考的替代方案-不要向我开枪!)


以下是另一种可能的解决方案:

x = '   18  295-9999 1780'

def split_up(x):
    return map(int, x.replace('-', ' -').split())
结果

>>> split_up(x)
[18, 295, -9999, 1780]

这正是我想要的,谢谢!顺便说一句,可读性是关键,特别是因为我是Python新手,我需要维护这段代码一段时间,所以感谢您使用re发布的替代方案。@James任何有能力的程序员都会意识到切片操作到底在做什么-所以我不会太担心,我非常喜欢这个解决方案。但是,如果在四个箱子中的一个箱子里给一个五位数的正数,它就会失败。@Krativitea,是的,你是对的。谢谢你指出这一点。
x = '   18  295-9999 1780'

def split_up(x):
    return map(int, x.replace('-', ' -').split())
>>> split_up(x)
[18, 295, -9999, 1780]