range(len(list))
будет просматривать длину списка один раз, а затем создать из него диапазон-итератор, который затем полностью отделен от списка и его длины.
Так for i in range(len(list))
заставит i
идти от 0
к len(list)-1
, без соблюдения изменений списка. Также обратите внимание, что обновление переменной итератора i
внутри цикла никак не повлияет на сам цикл. Когда начнется следующая итерация, i
просто получит следующее значение, независимо от того, хотите ли вы пропустить интеркацию, увеличивая до i
.
Чтобы пропустить итерации, вы обычно используете оператор continue
, который просто прервет текущую итерацию и начнет со следующего i
.
В отношении вашей реальной проблемы вы, кажется, хотите отфильтровать все числа, кратные 100. Вы можете проверить, что для одного номера намного проще, проверяя, можете ли вы разделить его на 100 без каких-либо остатков. Для этого вы используете modulo operation, который даст вам остаток для деления. В сочетании с пониманием список, в котором вы отфильтровывать для тех, вы можете написать его просто так:
>>> lst = [100, 200, 300, 301, 315, 345, 500]
>>> [n for n in lst if n % 100 == 0]
[100, 200, 300, 500]
Также обратите внимание, что вы не должны называть переменные list
как перезаписывает ссылку на list
типа.
Спасибо за ответ, но на самом деле моя цель является немного более сложным. Список был всего лишь примером. Извините, за то, что вы были неточными, но я не хотел вдаваться в подробности и давать слишком сложное описание. У меня есть несколько скользящих окон, а два списка сохраняют начальную и конечную позиции для каждого окна. Я хочу отфильтровать перекрывающиеся или соседние окна.Когда следующий элемент в списке очень близок к предыдущему, я хочу выполнить итерацию по списку, пока не найду элемент, который достаточно далеко, как только я его найду, я могу получить доступ к соответствующему элементу из второго списка. – Malfet