为什么我不能将char附加到Python中的空列表中?

时间:2014-01-12 02:59:15

标签: python list exception

在我写的一个程序中,我从一个字符列表中创建一个单词列表,我得到一个“列表索引超出范围”的异常。

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= ['!']?我怎么解决这个问题?如果我必须用某些东西初始化,我怎么知道列表所需的大小?是否有更好,更传统的方式来做我正在尝试的事情?

4 个答案:

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