Python 2.7 For循环错误:列表索引超出范围

Python 2.7 For循环错误:列表索引超出范围,python-2.7,list,class,for-loop,Python 2.7,List,Class,For Loop,所以我对编程相当陌生,最近刚开始学习类,我们应该制作一个电话簿,可以在单独的文本文件中加载 然而,当我进入for循环时,我在本节中不断遇到问题。它撞在墙上 if storage[2] == permaStorage[i].number: 并告诉我“索引器:列表索引超出范围”。我几乎可以肯定这是因为permaStorage一开始是空的,但即使我尝试用电话簿的临时实例填充它,它也会告诉我它超出了范围。它存在的主要原因是检查permaStorage中是否已经存在电话号码 有人知道如何解决这个问题或解

所以我对编程相当陌生,最近刚开始学习类,我们应该制作一个电话簿,可以在单独的文本文件中加载

然而,当我进入for循环时,我在本节中不断遇到问题。它撞在墙上

if storage[2] == permaStorage[i].number:
并告诉我“索引器:列表索引超出范围”。我几乎可以肯定这是因为permaStorage一开始是空的,但即使我尝试用电话簿的临时实例填充它,它也会告诉我它超出了范围。它存在的主要原因是检查permaStorage中是否已经存在电话号码

有人知道如何解决这个问题或解决这个问题吗

(如果文字写得不好,很抱歉。刚加入此网站,不确定其风格)


在python中,索引从零开始。因此,长度为5的列表的最后一个元素索引为4,从0开始。将范围更改为
范围(0,len(permastorage))
您应该迭代到列表的最后一个元素,而不是超过该元素

试试-

范围内的i(0,len(permaStorage)):

range()
中生成的数字列表是从开头开始的,但不包括结尾,因此
range(3)=[0,1,2]

因此,如果列表
x
的长度为10,
范围(0,len(x))
将给出0到9,这是列表元素的正确索引


1
添加到
len(x)
将产生范围
0到10
,当您尝试访问
x[10]
时,它将失败。

我认为问题在于permaStorage是空列表,然后您尝试:

for i in range(0, len(permaStorage)+1):
          if storage[2] == permaStorage[i].number:
将导致错误,因为permaStorage有0个项目,但u尝试获取第一个(i=0,permaStorage[0])项目

我认为你应该用第一条替换第二条:

for i in range(0, len(permaStorage)+1):    
    if i == len(permaStorage):
              print "hej"
              try:
                  tempbox = Add(storage[1], storage[2])
                  permaStorage.append(tempbox)
    if storage[2] == permaStorage[i].number:
              print "This number already exists. No two people can have the same phonenumber!\n"
              break

因此,在本例中,如果perStorage为空,您将附加一些值,下一个if子句就可以了。

为什么
len(permaStorage)+1
中,对于范围(0,len(permaStorage)+1)中的i:
?我添加它是为了定义一个等于permaStorage长度的范围。+1本来是要让它开始的,但很可能不是必需的,以后会导致问题。谢谢!遗憾的是,它并没有解决这个问题,因为永久存储空间的长度开始变为空。它遇到的错误是,当它尝试检查
if storage[2]==permaStorage[i]。number:
您也可以像
for elem in permaStorage:#Do stuff with elem if storage[2]==elem.number
那样对它进行迭代。它不起作用。它完全跳过了整个循环。当循环开始时(例如当它是
len(permaStorage)+1
时),它遇到的主要问题是列表索引超出范围。它检查
storage[2]==permaStorage[i]。number
谢谢!它确实工作了,但是在第二部分中它确实导致了一个小问题,它打印了“他的号码已经存在。没有两个人可以拥有相同的电话号码!\n”但这是一个很容易解决的小问题。是的,你可以在for循环的开头添加一个额外的验证,而不是“permaStorage”为空,例如:如果不是permaStorage:tempbox=add(存储[1],存储[2])permaStorage.append(tempbox)
for i in range(0, len(permaStorage)+1):    
    if i == len(permaStorage):
              print "hej"
              try:
                  tempbox = Add(storage[1], storage[2])
                  permaStorage.append(tempbox)
    if storage[2] == permaStorage[i].number:
              print "This number already exists. No two people can have the same phonenumber!\n"
              break