Как разделить строку на список?


Я хочу, чтобы моя функция 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(word)
9 459

9 ответов:

text.split()

этого должно быть достаточно, чтобы хранить каждое слово в списке. words это уже список слов из предложения, поэтому нет необходимости в цикле.

во-вторых, это может быть опечатка, но у вас есть ваш цикл немного напутал. Если вы действительно хотите использовать append, то будет:

words.append(word)

не

word.append(words)

разбивает строку text на любых последовательных запусках пробелов.

words = text.split()      

разделить строку text на разделитель: ",".

words = text.split(",")   

переменная слов будет list и содержат слова из text разделить на разделитель.

.split ()

возвратить список слов в строке, используя sep в качестве разделителя ... Если sep не указан или отсутствует, применяется другой алгоритм разбиения: запуски последовательных пробелов рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или конце, если строка имеет начальные или конечные пробелы.

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 

В зависимости от того, что вы планируете делать с вашим предложением-как-список, вы можете посмотреть на Естественный Язык Взял Комплект. Он имеет дело в значительной степени с обработкой и оценкой текста. Вы также можете использовать его для решения вашей проблемы:

import nltk
words = nltk.word_tokenize(raw_sentence)

Это имеет дополнительное преимущество разделения препинания.

пример:

>>> import nltk
>>> s = "The fox's 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() лучше, если вы не планируете делать какие-либо сложные манипуляции с Сентанс.

Как насчет этого алгоритма? Разделить текст на пробелы, затем обрезать знаки препинания. Это тщательно удаляет знаки препинания с края слов, не нанося вреда апострофам внутри слов, таких как 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']

я хочу, чтобы моя функция python разделила предложение (ввод) и сохранила каждое слово в списке

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

или более немного аккуратнее, используя список-понимание:

my_list = [current_word.lower() for current_word in words]

shlex есть .split()

Я думаю, что вы запутались из-за опечатки.

заменить print(words) с print(word) внутри вашего цикла, чтобы каждое слово, напечатанное на другую строку

можно использовать sta (строку в массив)

pip install sta

затем

>>> import sta
>>> sta("some words on a list")
['some', 'words', 'on', 'a', 'list']