在Python中手动分割字符串 - 最后一个分隔符的问题

0 投票
5 回答
1647 浏览
提问于 2025-04-16 15:39

我写了这个:

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

但是当我把一个 lineend-letter 作为分隔符时,它也会返回这个分隔符,像这样:

split('bndghsjhskashakhs', 's')

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

5 个回答

1

首先,你应该使用内置的 string.split('s') 方法来处理这种情况,这样可以避免很多麻烦。

你漏掉最后一个字符的原因是因为:

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

range 会返回从 0 到 max-1 的数字,所以你实际上是提前停止了一个字符。

把 -1 去掉就可以正常工作了。

1

你应该使用原生的分割方法,而不是自己重新写一个。比如,你可以这样做:'bndghsjhskashakhs'.split('s')

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

或者直接使用标准的 split 函数,而不需要你的自定义函数:

[ item for item in line.split('s') if item ]

或者最简洁的版本:

filter(None, line.split('s'))

撰写回答