我在尝试解决这个问题时遇到了一些问题。它来自练习考试,我似乎无法做到正确。我应该编写一个python函数,它接受一个字符串和一个分隔符,并返回一个列表,其中的字符串被剥离了分隔符。我们不允许使用拆分功能或"任何此类功能"。我们在问题中收到的例子就是这个
StringToken("this is so fun! I love it!", "!")
输出
["this is so fun", "I love it"]
这是我编写的代码,它非常简单。
def tokenizer(string, tmp):
newStr = []
for i in range(len(string)):
if string[i] != tmp:
newStr.append(string[i])
return newStr
,输出就是这个
['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'o', ' ', 'f', 'u', 'n', ' ', 'I', ' ', 'l', 'o', 'v', 'e', ' ', 'i', 't']
我如何重新加入每个单词?
答案 0 :(得分:3)
如果您加入列表中的所有元素,您将获得一个可能不是您要查找的字符串。
在将其附加到列表之前创建一个字符串,如;
>>> def StringToken(string, tmp):
newStrlist = []
newStr = ''
for i in range(len(string)):
if string[i] != tmp:
newStr += string[i]
elif newStr != '':
newStrlist.append(newStr)
newStr = ''
return newStrlist
... ... ... ... ... ... ... ... ... ...
>>> StringToken("this is so fun! I love it!", "!")
['this is so fun', ' I love it']
答案 1 :(得分:0)
请参阅代码中的注释以获取说明。
def StringToken(string, tmp):
newStr = "" # A string to build upon
lst = [] # The list to return
for c in string: # Iterate over the characters
if tmp == c: # Check for the character to strip
if newStr != "": # Prevent empty strings in output
lst.append(newStr.strip()) # add to the output list
newStr = "" # restart the string
continue # move to the next character
newStr += c # Build the string
return lst # Return the list
输出
StringToken("this is so fun! I love it!", "!")
# ['this is so fun', 'I love it']
答案 2 :(得分:0)
您可以使用find
来获取下一次出现的分隔符的索引,然后相应地构建列表,而不是循环遍历字符串中的所有字母:
def tokenizer(string, delim):
new_list = []
while True:
index = string.find(delim) # use find to next occurrence of delimiter
if index > -1:
new_list.append(string[:index])
string = string[index + len(delim):]
else:
new_list.append(string)
break # break because there is no delimiter present anymore
# remove whitespaces and trim the existing strings
return [item.strip() for item in new_list if item.strip()]
用法:
>>> tokenizer("this is so fun! I love it!", "!")
["this is so fun", "I love it"]
答案 3 :(得分:0)
这是一个比当前答案略短的替代方案:
def StringToken(string, tmp):
newStr = []
start = 0
for ind, char in enumerate(string):
if char == tmp:
newStr.append(string[start:ind])
start = ind + 1
return newStr
输出
>>> StringToken("this is so fun! I love it!", "!")
['this is so fun', ' I love it']
编辑: 如果您想删除前导或尾随空格(如示例中所示),可以使用strip():
完成def StringToken(string, tmp):
newStr = []
start = 0
for ind, char in enumerate(string):
if char == tmp:
newStr.append(string[start:ind].strip())
start = ind + 1
return newStr
输出
>>> StringToken("this is so fun! I love it!", "!")
['this is so fun', 'I love it']
答案 4 :(得分:-1)
只需使用连接运算符,这将使用给定的分隔符连接整个列表。 在这里你可以使用空分隔符''。 尝试:
a=['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'o', ' ', 'f', 'u', 'n', ' ', 'I', ' ', 'l', 'o', 'v', 'e', ' ', 'i', 't']
''.join(a)
输出
'This is so fun I love it'