#python #if-statement
Вопрос:
Существует код:
list = [1, 2] while list[-1] list[-2] lt;= 4000000: list.append(list[-1] list[-2]) for i in list: if i % 2 == 1: print(i) list.remove(i) print(list) print(sum(list))
Комментарии:
1. Не вызывайте свою переменную
list
, так как она затеняет встроеннуюlist()
функцию.2. поскольку все числа в списке уникальны, а код проверяет наличие нечетного числа с помощью list.remove, чтобы удалить это число из списка, какого результата вы ожидаете ?
3. редактирование списка во время итерации приводит к сбоям в работе итератора, поэтому вы в конечном итоге пропускаете по одному номеру для каждого удаляемого файла
Ответ №1:
Вы не должны изменять список (или любой контейнер) во время его просмотра.
Один из способов обойти это-использовать другой контейнер,
in_list = [1, 2] while in_list[-1] in_list[-2] lt;= 20: in_list.append(in_list[-1] in_list[-2]) print(in_list) out_list = [] for i in in_list: if i % 2 != 1: print(i) out_list.append(i) print(out_list) print(sum(out_list))
В этом коде используется подход, отличный от вашего: он создает входной список, затем при повторении добавляет нужные элементы в новый выходной список. Это имеет тот же эффект, что и удаление нечетных элементов из списка входных данных, однако это не нарушает итерацию путем изменения списка входных данных.
Как было сказано в комментариях, вы не должны использовать встроенные имена («список») для имен ваших переменных-это затенит их. Кроме того, при разработке и отладке кода лучше придерживаться небольших примеров. Здесь я использую 20 вместо 4 000 000 — гораздо проще отслеживать и не теряет смысла.