В списке есть значения но Питон все равно ругается "pop from empty list". Что не так?

sandwich_orders = ['hamburger', 'panini', 'BLT', 'Monte-Kristo']
finished_sandwiches = []
for sandwich in sandwich_orders:
    print(f"I made you {sandwich}")
while True:
    order = sandwich_orders.pop()
    finished_sandwiches.append(order)
    print(finished_sandwiches)

Ответы (3 шт):

Автор решения: Dmitry

Все достаточно просто, если знать, что тип list изменяемый. Следовательно, вызывая, метод pop() в бесконечном цикле, вы в конце концов получите пустой список. Вопрос, а что вы ожидаете? У вас нет выхода из цикла while, при пустом списку sandwich_orders

Добавьте в конец проверку длины списка, и у вас ошибка пропадет

while True:
    order = sandwich_orders.pop()
    finished_sandwiches.append(order)
    print(finished_sandwiches)
    if len(sandwich_orders) == 0:
        break
→ Ссылка
Автор решения: CameL
sandwich_orders = ['hamburger', 'panini', 'BLT', 'Monte-Kristo']
finished_sandwiches = []
for sandwich in sandwich_orders:
    print(f"I made you {sandwich}")
while len(sandwich_orders) > 0:
    order = sandwich_orders.pop()
    finished_sandwiches.append(order)
    print(finished_sandwiches)

Поменяйте условие в цикле while

→ Ссылка
Автор решения: CrazyElf
while True: # <-- нет проверки на исчерпание списка
    order = sandwich_orders.pop()
    ...

Нужно поменять условие цикла, чтобы он прекратился, когда вы исчерпаете список. Сейчас вы продолжаете извлекать элементы с помощью .pop даже из пустого списка.

while sandwich_orders:
    order = sandwich_orders.pop()
    ...
→ Ссылка