我应该写这段代码,让它从一个字符串返回一个列表,我不想重复list()或split()函数,但尝试写我自己的函数,模仿split(),但只使用空格分隔。
代码如下:
def mysplit(strng):
res = []
word = ""
for i in range(len(strng)):
if strng[i] != " ":
word += strng[i]
else:
res.append(word)
word = ""
if len(res) > 0:
return res
else:
return []
#These below are tests.
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))
这是预期输出:
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the', 'question']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the', 'question']
[]
['abc']
[]
这就是我得到的
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the']
['', '', '']
['', 'abc']
[]
3条答案
按热度按时间41zrol4v1#
它没有将最后一个单词追加到结果列表中,因为最后一个单词后面没有空格字符。要解决这个问题,您可以在循环后添加一个额外的检查,以便在最后一个单词不为空时将其追加到结果列表中。
结果:
2nc8po8w2#
你不需要使用 range(),因为你可以遍历源字符串而不用担心它的长度。类似这样:
输出:
ep6jt1vc3#
这个问题分为两个阶段:左/右 * 条带 * 和 * 分割 *。
在下面的代码是指最相似的原始之一。
来自评论:使用一个扩展字符串,在末尾附加一个额外白色。这将解决只最后一个单词 * 的问题。
这里有一个完整的解决问题的方法.它只需要一个额外的检查.
这里是另一个完整的解决方案,这是基于一个DIY的左/右条
备注:
str.isspace
可代替str == " "