索引错误:从空列表中弹出

时间:2017-01-22 13:33:53

标签: python python-2.7

我在编写python方面相当新...尝试理解.pop()函数以及如何从列表中弹出项目并附加到新列表。有人可以帮助我使用这段代码,看看它为什么告诉我,我是从空列表中弹出来的?

more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"] 
new_list = []

while len(new_list) <= 8:
    stuff = more_stuff.pop() 
    print "Adding: ", stuff
    new_list.append(stuff)

print new_list

我在运行代码时得到了这个结果:

Traceback (most recent call last):
  File "testpop.py", line 5, in <module>
    stuff = more_stuff.pop()
IndexError: pop from empty list

3 个答案:

答案 0 :(得分:2)

列表中的索引从零开始。

因此,在more_stuff[7]中,您将获得&#39; 这是最后一个。

您的代码在&#39; 之后尝试弹出另一个元素。

您需要解决的是:

while len(new_list) <= 7:

修改

你也可以用列表理解来做到这一点:

more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana",
"Girl", "Boy"] 

new_list = [more_stuff.pop() for __ in xrange(len(more_stuff))]

print new_list

答案 1 :(得分:0)

more_stuff为空时len(more_stuff)=0pop()仍然有用。

使用list作为条件,如果列表为空,则bool值为False

more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana",
"Girl", "Boy"] 
new_list = []
while more_stuff:
    stuff = more_stuff.pop() 
    print ("Adding: ", stuff)
    new_list.append(stuff)
  

可以测试任何对象的真值,以便在if或while中使用   条件或下面的布尔运算的操作数。下列   值被视为错误:

     
      
  •   
  •   
  • 任何数字类型的零,例如,0,0.0,0j。
  •   
  • 任何空序列,例如&#39;&#39;,(),[]。
  •   
  • 任何空映射,例如{}。
  •   
  • 用户定义类的实例,如果类定义 bool ()或 len ()方法,则该方法返回整数零或bool值False。
  •   

答案 2 :(得分:0)

您应该在more_stuff列表中检查您的情况,因为这将耗尽项目:

while len(more_stuff) > 0:
    ...