在python中手动拆分字符串 - 与最后一个分隔符一起发出问题

时间:2011-04-13 13:14:25

标签: 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']

4 个答案:

答案 0 :(得分:3)

问题在于:

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'))

答案 1 :(得分:1)

你应该使用原生分割而不是重写你自己的:    'bndghsjhskashakhs'.split('s')

答案 2 :(得分:1)

首先,你应该使用inbuild string.split('s')来做这样的事情,这样可以省去任何麻烦。

你错过最后一个角色的原因是:

for i in range (len(line)-1):

range将返回0..max-1,因此您实际上是在提早停止某个角色。

删除-1,它应该可以工作。

答案 3 :(得分:0)

怎么样:

>>> 'bndghsjhskashakhs'.split('s')
['bndgh', 'jh', 'ka', 'hakh', '']

或者,如果您不想要空值:

>>> filter(lambda x: x, 'bndghsjhskashakhs'.split('s'))
['bndgh', 'jh', 'ka', 'hakh']