如何将句子拆分为单个元素存入列表并实现索引访问?
我来帮你排查下代码里的问题,你想要的是把句子拆成单个单词的列表,现在的问题出在你把split返回的列表又嵌套了一层,导致最终的words是个嵌套列表,自然没法直接用words[2]访问第三个单词。
问题分析
当你输入"one two three"时,sentence.split(" ")已经直接返回了一个列表:["one", "two", "three"]。但你接下来写了:
words.extend([sentence.split(" ")])
这里你把这个列表又放进了另一个列表里(也就是[["one", "two", "three"]]),extend方法会把这个嵌套列表里的每个元素添加到words中——而这里嵌套列表里只有一个元素,就是那个单词列表,所以最终words变成了[["one", "two", "three"]],这时候你得用words[0][2]才能访问到第三个单词,显然不是你想要的效果。
修正方案
其实解决方法很简单,有两种常用方式:
方式1:直接赋值(最简洁)
split方法本身就返回拆分后的单词列表,直接把它赋值给words就行:
sentence = input('Please type a sentence:') words = sentence.split() # 这里不用写" ",split()默认按任意空白分割(包括多个空格、制表符),更鲁棒 print(words)
测试输入"one two three",输出就是['one', 'two', 'three'],这时候words[2]就能拿到'three'了。
方式2:使用extend(如果需要往已有列表里追加)
如果你已经有一个非空的words列表,想要把拆分后的单词加进去,直接把split的结果传给extend就行,不用额外套列表:
sentence = input('Please type a sentence:') words = [] words.extend(sentence.split()) # 直接传split返回的列表 print(words)
这样也能得到正确的扁平列表。
额外小提示
用split()(不带参数)比split(" ")更好,因为如果输入里有多个连续空格(比如"one two three"),split(" ")会返回['one', '', 'two', '', '', 'three'](包含空字符串),而split()会自动忽略多余空白,返回干净的['one', 'two', 'three']。
内容的提问来源于stack exchange,提问作者Moose

