Область видимости итератора в for + if Python

Цикл for перебирает элементы списка "a" и сравнивает 1 элемент и следующий за ним другой элемент

a = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7]

for (i, j) in (zip(range(len(a)), range(1, len(a)+1))):
    if int(a[i]) == int(a[j]):
        print(a[i])
        i += 2
        j += 2

В результате выводятся последние две 4, а нужно чтобы код выполнил сравнения:

...
3≠4
4=4
4≠5
...

Как пропустить среднюю 4 в списке "а"? Попробовал их вручную увеличивать (последние две строки кода), но это не дает сделать область видимости (если я правильно понял).

На данном этапе результат выполнения кода: 1 4 4 А я пытаюсь получит: 1 4

P.s. этот код будет в отдельной функции и массив у него будет и нескольких тысяч значений.


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

Автор решения: ganz

Попытка присвоить переменным i j новые значения с целью "перепрыгнуть" некоторые элементы, ничего не даст, так как при начале цикла им присваивается новое значение. Однако до конца итерации их можно менять как угодно. Здесь нужен подход основаный на continue,- пропуске текущей итерации. В твоём случае этого можно достичь применив условие if a[i]==4 or a[j]==4: continue; Так же может быть полезным введение переменной, сигнализирующей о том, что итерацию необходимо прервать:

cont=False
for (i, j) in (zip(range(len(a)), range(1, len(a)+1))):
    if int(a[i]) == int(a[j]):
        cont=True
    else:
        cont=False
    if cont:
        continue
    #основные действия цикла
→ Ссылка
Автор решения: GrAnd

Используйте цикл while для ручного управления индексом. Цикл for на каждой итерации обновляет свои переменные вне зависимости от того, что в них было записано вами в теле цикла.

a = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7]
i = 0
while i < len(a)-1:
    if a[i] == a[i+1]:
        print(a[i], "=", a[i+1])
        i += 1
    else:
        print(a[i], "≠", a[i+1])
    i += 1
1 = 1
2 ≠ 3
3 ≠ 4
4 = 4
4 ≠ 5
5 ≠ 6
6 ≠ 7
→ Ссылка