如何将一个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)
:
将word
variables重命名为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)
,将每个单词打印在不同的行上