在我写的一个程序中,我从一个字符列表中创建一个单词列表,我得到一个“列表索引超出范围”的异常。
def getlist(filename):
f = open('alice.txt','r')
charlist = f.read()
wordlist = []
done = False
while(not done):
j = 0
for i in range(0,len(charlist)):
if charlist[i] != ' ' and charlist[i] != '\n':
wordlist[j] += charlist[i]
else: j+= 1
done = i == len(charlist)-1
return wordlist
所以我开始讨论列表的工作方式,并发现:
list = ['cars']
list[0]+= '!'
给出list = ['cars!']
但是,用:
list = []
list[0]+= '!'
我出错了。为什么它不符合逻辑:list= ['!']
?我怎么解决这个问题?如果我必须用某些东西初始化,我怎么知道列表所需的大小?是否有更好,更传统的方式来做我正在尝试的事情?
答案 0 :(得分:2)
要添加到列表(包括空列表),请使用append()
方法:
>>> mylist = []
>>> mylist.append('!')
>>> mylist
['!']
答案 1 :(得分:2)
['cars']
是包含一个元素的列表。该元素是字符串'cars'
,其中包含4个字符。
list[0] += '!'
实际上做了三件事。 list[0]
部分选择位置0的list
元素。+=
部分连接两个字符串(如'cars' + '!'
会),并将结果字符串存储在list
的第0个广告位。
当您尝试将其应用于 empty 列表时,它会在“选择位置0处的元素”部分失败,因为没有这样的元素。您希望它的行为就像您没有空列表一样,而是['']
;包含一个元素的列表,它是空字符串。您可以轻松地将!
附加到空字符串的末尾,但在您的示例中,您没有空字符串。
答案 2 :(得分:0)
但是,用:
list = [] list[0]+= '!'
我出错了。为什么不做那似乎合乎逻辑的事情:
list= ['!']
?
因为在Python中不是逻辑。要将'!'
附加到list[0]
,list[0]
必须首先存在。它不会神奇地变成一个空字符串,以便将感叹号连接到。在一般情况下,无论如何,Python都无法弄清楚什么样的“空”元素可以起作用。
列表中提供了append
方法,以便将元素附加到列表中。但是,你正在做的是大量过度复杂的事情。如果你想要的只是一个由文件中的单词组成的列表,那么就像这样简单:
def getlist(filename):
with open(filename) as f:
return f.read().split()
答案 3 :(得分:0)
您的错误不是来自list[0]+= '!'
语句,而是来自访问超出范围错误的空列表:
>>> my_list = list()
>>> my_list[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>
并且+=
不用于附加到列表中,它用于连接字符串或数字加法,而在内部调用以下方法。
__iadd__(...)
x.__iadd__(y) <==> x+=y