在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
但是当我把一个 line
和 end-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'))