it-swarm.com.de

Wie teile ich einen String in eine Liste auf?

Ich möchte, dass meine Funktion Python einen Satz (eine Eingabe) aufteilt und jedes Wort in einer Liste speichert. Mein aktueller Code teilt den Satz, speichert die Wörter jedoch nicht als Liste. Wie mache ich das?

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)
533
Thanx
text.split()

Dies sollte ausreichen, um jedes Wort in einer Liste zu speichern. words ist bereits eine Liste der Wörter aus dem Satz, daher ist die Schleife nicht erforderlich.

Zweitens könnte es ein Tippfehler sein, aber Sie haben Ihre Schleife ein wenig durcheinander. Wenn Sie wirklich append verwenden möchten, wäre dies:

words.append(Word)

nicht

Word.append(words)
458
nstehr

Teilt die Zeichenfolge in text bei aufeinanderfolgenden Leerzeichenfolgen auf.

words = text.split()      

Teilen Sie die Zeichenfolge in text am Trennzeichen auf: ",".

words = text.split(",")   

Die Variable words ist ein list und enthält die Wörter aus text, die auf dem Trennzeichen aufgeteilt sind.

427
zalew

str.split ()

Gibt eine Liste der Wörter in der Zeichenfolge zurück, wobei sep als Trennzeichen verwendet wird. Wenn sep nicht angegeben ist oder None ist, wird ein anderer Aufteilungsalgorithmus verwendet Angewendet: Aufeinanderfolgende Leerzeichen werden als ein einzelnes Trennzeichen betrachtet, und das Ergebnis enthält am Anfang oder Ende keine leeren Zeichenfolgen, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält.

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

Je nachdem, was Sie mit Ihrem Satz als Liste vorhaben, sollten Sie sich das Natural Language Took Kit ansehen. Es beschäftigt sich intensiv mit Textverarbeitung und Auswertung. Sie können es auch verwenden, um Ihr Problem zu lösen:

import nltk
words = nltk.Word_tokenize(raw_sentence)

Dies hat den zusätzlichen Vorteil, dass die Interpunktion aufgeteilt wird.

Beispiel:

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

Auf diese Weise können Sie Satzzeichen herausfiltern, die Sie nicht möchten, und nur Wörter verwenden.

Bitte beachten Sie, dass die anderen Lösungen, die string.split() verwenden, besser sind, wenn Sie keine komplexe Manipulation des Satzes planen.

[Bearbeitet]

51
tgray

Wie wäre es mit diesem Algorithmus? Teilen Sie den Text in Leerzeichen und schneiden Sie die Interpunktion ab. Auf diese Weise werden Satzzeichen am Wortrand sorgfältig entfernt, ohne dass Apostrophe in Wörtern wie we're beschädigt werden.

>>> 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']
29
Colonel Panic

Ich möchte, dass meine Funktion python einen Satz (eine Eingabe) aufteilt und jedes Wort in einer Liste speichert

Die str().split() -Methode erledigt dies, nimmt einen String und teilt ihn in eine Liste auf:

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

Das Problem, das Sie haben, ist ein Tippfehler. Sie haben print(words) anstelle von print(Word) geschrieben:

Sie haben die Variable Word in current_Word umbenannt:

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

..wenn Sie getan haben sollten:

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

Wenn Sie aus irgendeinem Grund eine Liste in der for-Schleife manuell erstellen möchten, verwenden Sie die Methode list append(), möglicherweise, weil Sie alle Wörter in Kleinbuchstaben schreiben möchten (z. B.):

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

Oder etwas übersichtlicher mit einem Listenverständnis :

my_list = [current_Word.lower() for current_Word in words]
15
dbr

shlex hat eine .split() Funktion. Es unterscheidet sich von str.split() darin, dass es keine Anführungszeichen beibehält und einen zitierten Ausdruck als ein einzelnes Wort behandelt:

>>> import shlex
>>> shlex.split("Sudo echo 'foo && bar'")
['Sudo', 'echo', 'foo && bar']
11
Tarwin

Wenn Sie alle Zeichen eines Wort/Satz in einer Liste haben möchten, gehen Sie folgendermaßen vor:

print(list("Word"))
#  ['w', 'o', 'r', 'd']


print(list("some sentence"))
#  ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']
8
BlackBeard

Ich denke, Sie sind wegen eines Tippfehlers verwirrt.

Ersetzen Sie print(words) durch print(Word) in Ihrer Schleife, damit jedes Wort in einer anderen Zeile gedruckt wird

4
Aditya Mukherji