Область видимости итератора в 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 шт):
Попытка присвоить переменным 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
#основные действия цикла
Используйте цикл 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