В качестве практического вопроса я создал функцию 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)
Прежде чем вернуть список. Однако проблема в том, что если бы у меня была строка, повторяющая одно и то же слово.
Ваша проблема в том, что если в конце строки нет символа, который у вас уже есть внутри слова, он не добавляется к словам.
Добавьте слово в конец, если слово не пустое.
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
Я бы предпочел просто split
без каких-либо параметров, потому что по умолчанию это None
так что уже можно разделить на ' '
, '\n'
и '\t'
:
s='hello blah\t\nBlahFooBar'
print(s.split())
Выход:
['hello', 'blah', 'BlahFooBar']
Это делает еще больше, расщепляется на ie (' '
, ''\n ') и т.д....
len(words)
в этот момент равно 0.