如何将一个string拆分成一个列表?

我想我的python函数分割一个句子(input),并将每个单词存储在一个列表中。 到目前为止,我写的代码会分割句子,但不会将这些单词存储为列表。 我怎么做?

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

这应该足以将每个单词存储在列表中。 words已经是句子中单词的列表,所以不需要循环。

其次,这可能是一个错字,但你有你的循环有点搞砸了。 如果你真的想要使用append,那将是:

 words.append(word) 

 word.append(words) 

在连续运行的任何空格中,将string拆分为text

 words = text.split() 

以分隔符的text分割string: ","

 words = text.split(",") 

单词variables将是一个list并包含在分隔符上分割的text中的单词。

str.split()

使用sep作为分隔符返回string中的单词列表 …如果sep没有指定或者是None,则应用不同的分割algorithm:将连续空白的运行视为单个分隔符,结果将包含如果string具有前导或尾随空白,则在开始或结束时不会有空string。

 >>> 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()的其他解决scheme更好,如果你不打算做任何复杂的carryance操作。

这个algorithm怎么样? 在空白处分割文本,然后修剪标点符号。 这小心地从字的边缘去除标点符号,而不会像在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函数分割一个句子(input),并将每个单词存储在一个列表中

str().split()方法执行此操作,它接受一个string,将其分割成一个列表:

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

wordvariables重命名为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()函数。 它与str.split()不同之处在于它不保存引号并将引用的短语当作单个单词处理:

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

我认为你是因为input错误而感到困惑。

用您的循环内的print(word)replaceprint(words) ,将每个单词打印在不同的行上