2017-01-22 2 views
0

Я довольно новичок в кодировании 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 

ответ

2

Индексы в списке начинается с нуля.

Итак, в more_stuff[7] вы получите «Мальчик», который является последним.

Ваш код пытается вытолкнуть еще один элемент после 'Boy' который не существует.

Все, что вам нужно, чтобы исправить это:

while len(new_list) <= 7: 

EDIT:

Вы можете сделать это с список понимания, а также:

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

Спасибо за ваш ответ и помощь, все вы –

0

в то время как more_stuff пуст, len(more_stuff)=0, pop() все равно будет работать.

Используйте 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) 

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

Вы должны проверить свое состояние на more_stuff списке, потому что будет работать из пунктов:

while len(more_stuff) > 0: 
    ... 
Смежные вопросы