Cómo dividir una cadena en una lista?


Quiero que mi función Python divida una oración (entrada) y almacene cada palabra en una lista. Mi código actual divide la oración, pero no almacena las palabras como una lista. ¿Cómo hago eso?

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

Esto debería ser suficiente para almacenar cada palabra en una lista. words ya es una lista de las palabras de la oración, por lo que no hay necesidad del bucle.

En segundo lugar, podría ser un error tipográfico, pero tienes tu bucle un poco desordenado. Si realmente quieres usar append, sería:

words.append(word)

No

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-01 09:17:57

Divide la cadena en text en cualquier ejecución consecutiva de espacios en blanco.

words = text.split()      

Divide la cadena en text en el delimitador: ",".

words = text.split(",")   

La variable words será un list y contendrá las palabras de text divididas en el delimitador.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 11:00:34

Str.dividir()

Devuelve una lista de las palabras en la cadena, usando sep como delimitador ... Si sep no está especificado o no es Ninguno, se aplica un algoritmo de división diferente: las ejecuciones de espacios en blanco consecutivos se consideran un solo separador, y el resultado no contendrá cadenas vacías al principio o al final si la cadena tiene espacios en blanco iniciales o finales.

>>> 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-16 09:35:11

Dependiendo de lo que planee hacer con su frase-como-una-lista, es posible que desee mirar el Lenguaje Natural Tomó Kit. Se ocupa en gran medida del procesamiento y la evaluación de textos. También puede usarlo para resolver su problema:

import nltk
words = nltk.word_tokenize(raw_sentence)

Esto tiene el beneficio adicional de dividir la puntuación.

Ejemplo:

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

Esto le permite filtrar cualquier puntuación que no desee y usar solo palabras.

Tenga en cuenta que las otras soluciones que utilizan string.split() son mejor si no planeas hacer ninguna manipulación compleja de la sentencia.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-13 14:24:18

¿Qué tal este algoritmo? Divide el texto en espacios en blanco y, a continuación, recorta la puntuación. Esto elimina cuidadosamente la puntuación del borde de las palabras, sin dañar los apóstrofos dentro de palabras como 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-15 20:35:32

Quiero que mi función python divida una oración (entrada) y almacene cada palabra en una lista

El método str().split() hace esto, toma una cadena, la divide en una lista:

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

El problema que estás teniendo es debido a un error tipográfico, escribiste print(words) en lugar de print(word):

Cambiando el nombre de la variable word a current_word, esto es lo que tenías:

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

..cuando deberías haber hecho:

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

Si por alguna razón desea construir manualmente una lista en el para loop, usarías el método list append(), quizás porque quieres minúsculas todas las palabras (por ejemplo):

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

O más un poco más ordenado, usando una lista comprensión :

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-13 13:51:37

Shlex tiene un .split() función. Se diferencia de str.split() en que no conserva las citas y trata una frase citada como una sola palabra:

>>> 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-22 20:53:34

Creo que estás confundido debido a un error tipográfico.

Reemplace print(words) con print(word) dentro de su bucle para tener cada palabra impresa en una línea diferente

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-25 19:18:31

Puede usar sta (string to array )

pip install sta

Entonces

>>> 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-02 06:36:06