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']
答案 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']