Создана функция разделения, но она не работает должным образом

1

В качестве практического вопроса я создал функцию split, которая в основном делает то же самое, что и str.split(). Однако для моего первого тестового значения кажется, что последнее слово игнорируется и не добавляется в список. Я понимаю, что это потому, что сравнивается "конец", поэтому он пропускает мой оператор if и не добавляет слово.

Мне было интересно, может ли кто-нибудь взглянуть и помочь улучшить код, так что слово добавляется, возможно, вне выражения if, чтобы оно не игнорировало конечное слово.

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(''))

Я думал о добавлении заявления:

if word not in words:
       words.append(word)

Прежде чем вернуть список. Однако проблема в том, что если бы у меня была строка, повторяющая одно и то же слово.

Теги:
python-3.x

2 ответа

1
Лучший ответ

Ваша проблема в том, что если в конце строки нет символа, который у вас уже есть внутри слова, он не добавляется к словам.

Добавьте слово в конец, если слово не пустое.

Edit: 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

  • 0
    Рад был помочь :)
  • 3
    Это не сработает, если есть только одно слово, потому что len(words) в этот момент равно 0.
Показать ещё 2 комментария
0

Я бы предпочел просто split без каких-либо параметров, потому что по умолчанию это None так что уже можно разделить на ' ', '\n' и '\t':

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

Выход:

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

Это делает еще больше, расщепляется на ie (' ', ''\n ') и т.д....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню