2017-01-22 4 views
0

Ich bin ziemlich neu bei der Codierung von Python ... Versucht, die .pop() -Funktion zu verstehen und wie ein Element aus einer Liste und an eine neue Liste anfügen. Kann jemand mir mit diesem Code helfen, um zu sehen, warum er mir sagt, dass ich aus einer leeren Liste herausspringe?Index Fehler: Pop von leeren Liste

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 

Ich erhalte dieses Ergebnis, wenn der Code ausgeführt wird:

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

Antwort

2

Die Indizes in einer Liste beginnt bei Null.

So, in more_stuff[7] erhalten Sie 'Boy', die die letzte ist.

Ihr Code versucht, ein anderes Element nach 'Boy', die nicht existiert, zu pop.

Alles, was Sie beheben müssen, ist:

while len(new_list) <= 7: 

EDIT:

Sie es auch mit Liste Verständnis tun konnte:

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

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

print new_list 
+0

Vielen Dank für Ihre Antwort und Hilfe, Sie alle –

0

während more_stuff leer ist, len(more_stuff)=0, Die pop() wird immer noch funktionieren.

Verwenden list als Bedingung, wenn die Liste leer ist, ist der Boolesche Wert 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) 

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

  • None
  • False
  • zero of any numeric type, for example, 0, 0.0, 0j.
  • any empty sequence, for example, '',(), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a bool() or len() method, when that method returns the integer zero or bool value False.
0

Sie sollten Ihren Zustand auf der more_stuff Liste überprüfen, weil das aus Artikel laufen:

while len(more_stuff) > 0: 
    ...