Разделение строки на отдельные слова (Python)

#python #string #python-2.7

#python #строка #python-2.7

Вопрос:

Итак, у меня есть этот код здесь:

 #assign a string to variable
x = "example text"
#create set to store separated words
xset = []
#create base word
xword = ""
for letter in x:
    if letter == " ":
        #add word
        xset.append(xword)
        #add space
        xset.append(letter)
        #reset base word
    else:
        #add letter
        xword = xword   letter
        #back to line 9
#print set with separated words
print xset
  

Итак, довольно понятно, что функция for просматривает каждую букву x , и если это не пробел, он добавляет его xword (представьте, что это так xword = "examp" "l" , что бы сделать xword = "exampl" ). Если это пробел, он добавляет xword и пробел к набору и сбрасывает xword .

Моя проблема заключается в том, что слово "text" не включается в окончательный набор. Когда выполняется этот код и печатается набор, он выдает следующее:`[‘пример’, ‘ ‘]

Так почему же они не "text" отображаются в наборе?

Комментарии:

1. В вашем цикле вы добавляете слово только тогда, когда нажимаете пробел. После вашего последнего слова нет пробела, поэтому последнее слово не добавляется. Попробуйте добавить xword в свой список (это список, а не набор) после завершения цикла.

2. Я предполагаю, что вы делаете это как часть урока. В этом случае это имеет смысл. В противном случае: xset = x.split()

3. x.split() это хорошо, но если вы хотите сохранить пространство в списке, сделайте re.split("( )", x)

4. import re -> re.split(r'(W )', x)

Ответ №1:

Потому что, когда ваш код достигает пробела в x нем, добавляется xword . Но это происходит только тогда, когда оно достигает пробела. Поскольку после текста нет пробелов, конечный результат xset также не добавляется, вы не сбрасывали xword :

 #assign a string to variable
x = "example text"
#create set to store separated words
xset = []
#create base word
xword = ""
for letter in x:
    if letter == " ":
        #add word
        xset.append(xword)
        #add space
        xset.append(letter)
        #reset base word
        xword = ""
    else:
        #add letter
        xword = xword   letter
        #back to line 9
#print set with separated words
xset.append(xword)
print xset
  

Вывод:

 ['example', ' ', 'text']
  

Ответ №2:

Вам нужно добавить еще одно добавление после цикла, чтобы добавить последнее слово

 #assign a string to variable
x = "example text"
#create set to store separated words
xset = []
#create base word
xword = ""
for letter in x:
    if letter == " ":
        #add word
        xset.append(xword)
        #add space
        xset.append(letter)
        #reset base word
    else:
        #add letter
        xword = xword   letter
        #back to line 9
xset.append(xword)
#print set with separated words
print xset
  

Ответ №3:

Просто используйте string.split() . Эта команда вернет список слов в вашей строке. Вот документация по этому вопросу: https://docs.python.org/2/library/string.html

Если ваши значения разделены пробелом, сделайте что-то вроде этого:

 r.split()
Out[26]: ['some', 'text', 'here']
  

Если ваш разделитель отличается от пробела, вы можете указать его следующим образом:

 s.split(',')
Out[21]: ['some', 'text', 'here']