返回由分隔符

时间:2016-06-08 04:56:09

标签: python split

我在尝试解决这个问题时遇到了一些问题。它来自练习考试,我似乎无法做到正确。我应该编写一个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']

我如何重新加入每个单词?

5 个答案:

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