手动在python中拆分字符串-最后一个定界符

问题描述

|| 我写这个:
def split(line,delim):
    s=[]
    j=0
    for i in range (len(line)-1):
        if delim== line [i]:
            s.append(line[j:i])
            j=i+1
    s.append (line[j:])
    return s
但是当我放一行并且结尾字母是delim时,它也会返回delim 像这样:
split(\'bndghsjhskashakhs\',\'s\')

[\'bndgh\',\'jh\',\'ka\',\'hakhs\']
    

解决方法

问题出在您:
for i in range (len(line)-1):
这将从第一个字符迭代到最后一个字符。它忽略最后一个字符。更改为:
for i in range (len(line)):
现在返回
[\'bndgh\',\'jh\',\'ka\',\'hakh\',\'\']
。 无论如何,正如其他张贴者所写,您可以使用标准的
.split()
功能。 如果要删除空元素,可以在末尾添加一个过滤器:
return [ item for item in s if item ] 
代替
return s
或直接使用标准拆分而不使用您的功能:
[ item for item in line.split(\'s\') if item ]
或最短版本:
filter(None,line.split(\'s\'))
    ,您应该使用本机拆分,而不是重写自己的拆分:    
\'bndghsjhskashakhs\'.split(\'s\')
    ,首先,您应该使用内置的
string.split(\'s\')
这样的东西,它将省去任何麻烦。 您缺少最后一个字符的原因是:
for i in range (len(line)-1):
range
将返回0..max-1,因此您实际上是在尽早停止字符。 删除-1,它应该可以工作。     ,怎么样:
>>> \'bndghsjhskashakhs\'.split(\'s\')
[\'bndgh\',\'\']
或者,如果您不想使用空值:
>>> filter(lambda x: x,\'bndghsjhskashakhs\'.split(\'s\'))
[\'bndgh\',\'hakh\']