Выполнение конструкции if со второго цикла
у меня есть задача, в которой используется конструкция if и я хочу сделать так, чтобы эта конструкция начала проверятся только со второго цикла.
n = 0
for i in range (...):
n += 1
if n != 1 and ...
elif n != 1 and ...
мне приходится в каждом условии проверять, что этот цикл идет уже не первый раз, чтобы он начал выполнятся. Можете подсказать какие то более простые способы проверки этого условия, чтобы это было короче.
Ответы (4 шт):
Если у тебя уже
for i in range(...):
то проверка делается через
if i:
Если там не range, то можно использовать
for i,x in enumerate(...)
Самый простой способ - с помощью оператора continue.Код с условиями if просто не будет выполнен в первый раз.
n = 0
for i in range(...):
n += 1
if n == 1:
continue
Создав вокруг последовательности итератор, мы получим возможность управлять выдачей елементов. В частности, применив к нему перед циклом функцию next, мы как-бы пропустим первый ход, после чего обрабатываем в цикле оставшуюся часть, зная, что первый шаг сделан.
Пример из жизни - у вас есть текстовый файл данных с комментарием в первой строке. Файловый объект - это уже итератор, поставляющий строки. Поэтому, применив к нему перед циклом обработки строк функцию next, мы продвинем его на одну строку вперед. А значит в цикле не нужно проверять, является ли строка первой:
from io import StringIO # эмулируем работу с файлом
dummy_data = '''\
# Комментарий к файлу в первой строке
1 2 3 4
5 6 7
8 9
'''
with StringIO(dummy_data) as file:
# Пропускаем первую строку с комментарием
next(file, None)
# Обрабатываем остальные строки
data = []
for line in file:
data.extend(map(int, line.split()))
print(data)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
В примере из вопроса делаем то же самое, но с учетом, что источник данных может не быть итератором, и тогда к нему нужно применить функцию iter:
items = ...
# обернуть данные в итератор
iter_items = iter(items)
# пропустить первый шаг
next(iter_items, None)
# дальше при проверке условий
# дополнительная проверка шага не нужна
for i in iter_items:
if ...:
...
elif ...:
...