Просто так заканчиваются итерации

есть программа, которой дается список температур за каждый день, надо найти средненедельную температуру, используя дек. Но вот проблемка, сперва все идет хорошо, но на третьей недели алгоритм просто так заканчивается. Хотел посмотреть через отладчик вдруг условие остановки выполняется, но нет, интерпретатор тупо выходит из цикла, как-будто там закончились аргументы, начал выводить список, но элементов там еще полно. В чем проблема? Подскажите, пожалуйста


temps = list(reversed([20.6, 19.4, 19.0, 19.0, 22.1,
                        22.5, 22.8, 24.1, 25.6, 27.0,
                        27.0, 25.6, 26.8, 27.3, 22.5,
                        25.4, 24.4, 23.7, 23.6, 22.6,
                        20.4, 17.9, 17.3, 17.3, 18.1,
                        20.1, 22.2, 19.8, 21.3, 21.3,
                        21.9]))
print(temps)
days = deque(maxlen=7)
 
for temp in temps:
    # Добавляем температуру в очередь
    a = temps.pop()
    days.append(a)
    print(days)
    print(temps)
    
    if len(days) == days.maxlen:
        print('temp',round(sum(days) / len(days), 2), end='; ')
        days.clear()

print("")

введите сюда описание изображения


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

Автор решения: CrazyElf
    a = temps.pop()
    days.append(a)

Зачем это всё, если у вас есть переменная цикла, в которой перебирается коллекция? Замените эти строки на:

    days.append(temp)

Изменять в цикле коллекцию, по которой вы итерируетесь - прямой путь к непоняткам.

Если всё же хотите сохранить внутреннюю логику цикла с pop, то просто итерируйтесь по копии списка, тогда всё, что внутри цикла можно не менять:

for temp in temps.copy():
→ Ссылка