Работа цикла for ... in ... (есть не понимание его работы)

текст, выделенный жирным шрифтомЦель задачи - удалить элементы из списка с помощью метода .pop(), и оставить только 2 из них и вывести оставшийся список и новые приглашения. Хотел решить с помощью перебора через цикл for ... in ... и в тело цикла добавить условие, что если длина списка == 2, то показать список и отправить приглашения, и остановить программу. Но цикл выполняет только 4 итерации, почему он глохнет, мне не понятно. Вообще по книге подразумевается решение задачи, простым удалением элементов, типо: print('Del guest:', guest.pop()) и т.д. До тех пор пока не останется двое. И так же через print() для каждого элемента через индекс([0], 1) вывести новое приглашение. Только учусь, не кидайте тапками! )

guests = ['Сталин', 'Путин', 'Романов', 'Суворов']#3.4
print(f'Стартовый список гостей: {guests}')
not_come = guests.pop(2)
guests.insert(2, 'Жуков')
guests.insert(0, 'Ленин')
guests.insert(3, 'Пригожин')
guests.append('Распутин')
print('\nК сожалению, обеденный стол не успевают доставить, будут приглашены только 2-e гостей!')
print(f'\nТекущий список гостей: {guests}')
len_guest = len(guests)
for guest in guests:
    print(len_guest)
    if len_guest == 2:
        print(f'Осталось {len_guest} гостей {guests}')
        for guest in guests:
            print(f'\tПриглашаю вас, {guest}, на ужин')
        break
    len_guest -= 1
    print(f'Сожалею о том, что вы ,{guests.pop()}, не сможете участвовать на приеме!')

Пришел к такому решению, после подсказки в комментарии! Спасибо Виктор! Решение задачи, через первый способ, можно без else(использовал для себя, чтобы было нагляднее), очередное спасибо за подсказку!


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

Автор решения: Виктор

В цикле for guest in guests: нельзя менять guests, то есть guests.pop() делать нельзя. Это не ограничение на pop, а на то, что итерируется по списку и если Вы его меняете (список), то всё сбивается при переборе элементов (ну это я на пальцах объяснил:)

→ Ссылка