Как разбить строку на список?
Я хочу, чтобы моя функция Python разделяла предложение (вход) и сохраняла каждое слово в списке. Мой текущий код разбивает предложение, но не хранит слова в виде списка. Как я могу это сделать?
def split_line(text):
# split the text
words = text.split()
# for each word in the line:
for word in words:
# print the word
print(words)
Ответы
Ответ 1
text.split()
Этого должно быть достаточно, чтобы хранить каждое слово в списке. words
уже является списком слов из предложения, поэтому нет необходимости в цикле.
Во-вторых, это может быть опечатка, но у вас есть своя петля, немного перепутанная. Если вы действительно хотите использовать append, это будет:
words.append(word)
not
word.append(words)
Ответ 2
Разделяет строку в text
на любом последовательном прогоне пробелов.
words = text.split()
Разделите строку в text
на разделителе: ","
.
words = text.split(",")
Переменная слов будет list
и содержать слова из text
split на разделителе.
Ответ 3
str.split()
Верните список слов в строке, используя sep в качестве разделителя... Если sep не указан или None, применяется другой алгоритм разделения: пробеги последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или в конце, если строка имеет ведущую или конечную пробельные.
>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>>
Ответ 4
В зависимости от того, что вы планируете делать со своим предложением в виде списка, вы можете посмотреть на Natural Language Took Kit. Это имеет дело с обработкой текста и оценкой. Вы также можете использовать его для решения вашей проблемы:
import nltk
words = nltk.word_tokenize(raw_sentence)
Это имеет дополнительное преимущество разделения пунктуации.
Пример:
>>> import nltk
>>> s = "The fox foot grazed the sleeping dog, waking it."
>>> words = nltk.word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',',
'waking', 'it', '.']
Это позволяет отфильтровывать любые знаки препинания, которые вам не нужны, и использовать только слова.
Обратите внимание, что другие решения, использующие string.split()
, лучше, если вы не планируете делать какие-либо сложные манипуляции с предложением.
[Изменено]
Ответ 5
Как насчет этого алгоритма? Разделите текст на пробелы, затем нарисуйте пунктуацию. Это тщательно удаляет пунктуацию с краев слов, не нанося вреда апострофам внутри слов, таких как we're
.
>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"
>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]
>>> import string
>>> [word.strip(string.punctuation) for word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']
Ответ 6
Я хочу, чтобы моя функция python разделила предложение (ввод) и сохранила каждое слово в списке
Метод str().split()
делает это, он берет строку, разбивает ее на список:
>>> the_string = "this is a sentence"
>>> words = the_string.split(" ")
>>> print(words)
['this', 'is', 'a', 'sentence']
>>> type(words)
<type 'list'> # or <class 'list'> in Python 3.0
Проблема, с которой вы столкнулись, связана с опечаткой, вы написали print(words)
вместо print(word)
:
Переименование переменной word
на current_word
, это то, что у вас было:
def split_line(text):
words = text.split()
for current_word in words:
print(words)
.. когда вы должны были сделать:
def split_line(text):
words = text.split()
for current_word in words:
print(current_word)
Если по какой-то причине вы хотите вручную создать список в цикле for, вы должны использовать метод list append()
, возможно, потому, что хотите сократить все слова (например):
my_list = [] # make empty list
for current_word in words:
my_list.append(current_word.lower())
Или немного более аккуратно, используя list-comprehension:
my_list = [current_word.lower() for current_word in words]
Ответ 7
shlex имеет функцию .split()
. Он отличается от str.split()
тем, что не сохраняет кавычки и обрабатывает цитируемую фразу как одно слово:
>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']
Ответ 8
Я думаю, вы запутались из-за опечатки.
Замените print(words)
на print(word)
внутри вашего цикла, чтобы каждое слово было напечатано в другой строке
Ответ 9
Если вы хотите, чтобы все символы слова/предложения в списке, сделали это:
print(list("word"))
# ['w', 'o', 'r', 'd']
print(list("some sentence"))
# ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']
Ответ 10
Вы можете использовать sta (строка в массив)
pip install sta
затем
>>> import sta
>>> sta("some words on a list")
['some', 'words', 'on', 'a', 'list']