Jak podzielić ciąg znaków na listę?

Chcę, aby moja funkcja Pythona dzieliła zdanie (wejście) i zapisywała każde słowo na liście. Mój obecny kod dzieli zdanie, ale nie przechowuje słów jako listy. Jak mam to zrobić?

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)
Author: Zoe, 2009-04-13

9 answers

text.split()

To powinno wystarczyć, aby zapisać każde słowo na liście. words jest już listą słów ze zdania, więc nie ma potrzeby stosowania pętli.

Po drugie, to może być literówka, ale masz trochę namieszaną pętlę. Jeśli naprawdę chcesz użyć append, będzie to:
words.append(word)

Nie

word.append(words)
 387
Author: nstehr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-01 09:17:57

Dzieli łańcuch znaków na text na dowolne kolejne ciągi znaków.

words = text.split()      

Podziel łańcuch na {[2] } na separatorze: ",".

words = text.split(",")   

Zmienna słowa Będzie list i będzie zawierać słowa z text podzielone na ogranicznik.

 376
Author: zalew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 11:00:34

Str.split()

Zwraca listę słów w łańcuchu, używając Sep jako ogranicznika ... Jeśli sep nie jest określony lub nie jest żaden, stosuje się inny algorytm dzielenia: ciągi kolejnych białych znaków są traktowane jako pojedynczy separator, a wynik nie będzie zawierał pustych łańcuchów na początku lub końcu, jeśli łańcuch ma początkowe lub końcowe białe znaki.

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 
 73
Author: gimel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 09:35:11

W zależności od tego, co planujesz zrobić z listą zdań, możesz spojrzeć na Zestaw języka naturalnego. Zajmuje się głównie przetwarzaniem i ewaluacją tekstu. Możesz również użyć go do rozwiązania problemu:

import nltk
words = nltk.word_tokenize(raw_sentence)

To ma dodatkową zaletę dzielenia interpunkcji.

Przykład:

>>> 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', '.']

To pozwala odfiltrować dowolną interpunkcję, której nie chcesz i używać tylko słów.

Należy pamiętać, że inne rozwiązania wykorzystujące string.split() to lepiej, jeśli nie planujesz skomplikowanej manipulacji sentencją.

 44
Author: tgray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 14:24:18

A co z tym algorytmem? Podziel tekst na białe znaki, a następnie przycinaj znaki interpunkcyjne. To dokładnie usuwa interpunkcję z krawędzi słów, bez szkody dla apostrofów wewnątrz słów, takich jak 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']
 24
Author: Colonel Panic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 20:35:32

Chcę, aby moja funkcja Pythona dzieliła zdanie (wejście) i zapisywała każde słowo na liście

Metoda str().split() robi to, pobiera ciąg znaków, dzieli go na listę:

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

Problem masz z powodu literówki, napisałeś print(words) zamiast print(word):

Zmiana nazwy zmiennej word na current_word, Oto co miałeś:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(words)

..kiedy powinieneś zrobić:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(current_word)

Jeśli z jakiegoś powodu chcesz ręcznie skonstruować listę w w przypadku pętli należy użyć metody list append(), być może dlatego, że wszystkie słowa mają małe litery (na przykład):

my_list = [] # make empty list
for current_word in words:
    my_list.append(current_word.lower())

Lub bardziej schludnie, używając rozumienia listy :

my_list = [current_word.lower() for current_word in words]
 14
Author: dbr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 13:51:37

Shlex ma .split() Funkcja. Różni się od str.split() tym, że nie zachowuje cudzysłowów i traktuje cytowaną frazę jako pojedyncze słowo:

>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']
 11
Author: Tarwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 20:53:34

Myślę, że jesteś zdezorientowany z powodu literówki.

Zamień print(words) na print(word) wewnątrz pętli, aby każde słowo było wydrukowane w innej linii

 3
Author: Aditya Mukherji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-25 19:18:31

Możesz użyć sta (string to array)

pip install sta

Then

>>> import sta
>>> sta("some words on a list")
['some', 'words', 'on', 'a', 'list']
 0
Author: Carlos Abraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 06:36:06