Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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,考虑到带有数字的文本行,我想将其分割成十个字符的片段,但如果存在,我想接受少于十个字符的片段 使用我的脚本,我可以获得四个完整的组,使用10作为固定长度,但最后四个字符丢失 正确的输出是: ['0123456789', '0123456789', '0123456789', '0123456789', '0123'] 但我得到的是: ['0123456789', '0123456789', '0123456789', '0123456789'] 为了达到预期的效果,有没有关于修正这些线的建议

考虑到带有数字的文本行,我想将其分割成十个字符的片段,但如果存在,我想接受少于十个字符的片段

使用我的脚本,我可以获得四个完整的组,使用10作为固定长度,但最后四个字符丢失

正确的输出是:

['0123456789', '0123456789', '0123456789', '0123456789', '0123']
但我得到的是:

['0123456789', '0123456789', '0123456789', '0123456789']
为了达到预期的效果,有没有关于修正这些线的建议

step = 10
seq = "0123456789012345678901234567890123"
parts = []
for i in range(len(seq)/step): 
    sub = seq[i * step: (i + 1) * step]
    parts.append(sub)
print parts
在每次迭代中,这将消耗
seq
步长开始部分,并将其附加到
列表中。由于
seq[:step]
len(seq)
时也可以工作,因此无论最后一部分的长度如何,在最后一次迭代中也可以正常工作。

范围(len(seq)/step)
将返回
[0,1,2]
,因此您将只执行3次循环迭代

您可以修改它以添加1,如下所示:

for i in range(len(seq)//step+1): 
但是,如果序列是步骤的精确倍数,这将导致列表的最后一个元素是空字符串。要解决这个问题,您可以添加一个
if
语句来不附加空字符串,或者以不同的方式计算范围。我建议如下:

step = 10
seq = "0123456789012345678901234567890123"
parts = []
nSteps = len(seq)//step + (0 if len(seq)%step == 0 else 1)
for i in range(nSteps): 
    sub = seq[i * step: (i + 1) * step]
    parts.append(sub)
print(parts)
#['0123456789', '0123456789', '0123456789', '0123']

另一件需要注意的事情是,我使用
/
而不是
/
来表示整数除法。这在python2中没有区别,但后者会破坏python3中的代码。类似地,我将
print
用作函数而不是语句。

您可以通过
步骤修改
范围

step = 10
seq = "0123456789012345678901234567890123"
parts = []
for i in range(0, len(seq), step):
    sub = seq[i: i + step]
    parts.append(sub)
print parts
输出:

['0123456789', '0123456789', '0123456789', '0123']

您可能希望尝试允许最后一个案例出现的条件:

step = 10
seq = "0123456789012345678901234567890123"
parts = []
for i in range(len(seq)/step): 
    if i> (len(seq)/step)*(step - 1):
        sub = seq[(i-1)*step:]
    else:
        sub = seq[i * step: (i + 1) * step]
    parts.append(sub)
print parts

我认为至少有一些答案允许部分的最终块-尝试其中的几个。注意,如果len(seq)是step的倍数,它将进行额外的迭代。例如,使用
seq=“012345678901234567890123456789”
step=10
它返回
['0123456789','0123456789','0123456789',''”
@franciscosolima是的,我意识到了这一点并发布了更新。谢谢你指出这一点。
step = 10
seq = "0123456789012345678901234567890123"
parts = []
for i in range(len(seq)/step): 
    if i> (len(seq)/step)*(step - 1):
        sub = seq[(i-1)*step:]
    else:
        sub = seq[i * step: (i + 1) * step]
    parts.append(sub)
print parts