创建了一个拆分函数,但未按预期工作

时间:2018-09-25 23:54:54

标签: python python-3.x

作为一个实践问题,我创建了一个拆分函数,该函数基本上与cat file | head -$N | tail -1做同样的事情。但是,对于我的第一个测试值,似乎最后一个单词被忽略了,并且没有添加到列表中。我了解这是因为没有比较“结束”字符,所以它跳过了我的if语句,而不添加单词。

我想知道是否有人可以看一下并帮助改进代码,以便将该单词添加到if语句之外,从而不会忽略结尾单词。

str.split()

我想添加一条语句:

def split(string):
    words = []
    char_to_split = [' ', '\n', '\t']
    word = ""
    for ch in string:
        if ch in char_to_split:
            if word != "":
                words.append(word)
                word = ""
        else:
            word += ch
    if len(words) != 0:
        return words
    else:
        return None

if __name__ == "__main__":
    print(split('duff_beer 4.00'))
    print(split('a b c\n'))
    print(split('\tx   y \n  z '))
    print(split(''))

在我返回列表之前。但是,问题在于如果我有一个重复相同单词的字符串。

2 个答案:

答案 0 :(得分:1)

您的问题是,如果在字符串的末尾没有分隔符,则单词中已有的内容不会添加到单词中。

如果单词不为空,请在单词末尾附加单词。

编辑:kindall指出仅使用一个单词就无法在字符串上运行,因此我将条件移至if len(words) != 0

之外
def split(string):
    words = []
    char_to_split = [' ', '\n', '\t']
    word = ""
    for ch in string:
        if ch in char_to_split:
            if word != "":
                words.append(word)
                word = ""
        else:
            word += ch
    if word: words.append(word) # add this
    if len(words) != 0:
        return words
    else:
        return None

print(split('duff_beer 4.00'))
>>> ['duff_beer', '4.00']

编辑@k

答案 1 :(得分:0)

我宁愿不做任何参数而只做split,因为默认情况下它是None,因此可以在' ''\n''\t'上拆分:

s='hello blah\t\nBlahFooBar'
print(s.split())

输出:

['hello', 'blah', 'BlahFooBar']

这甚至可以做更多事情,例如(' ',`'\ n')等...