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