Возможно, самый простой подход - использование zip
, но для этого потребуется загрузка всех строк в память и создание 2 списков, что может быть непросто, если на самом деле у вас 2 миллиона строк:
li = [1, 1, 2, 2, 3, 3, 1, 1, 2, 1, 2, 3]
print([index + 1 for index, (a, b) in enumerate(zip(li[:-1], li[1:])) if a != b])
# [2, 4, 6, 8, 9, 10, 11]
Более консервативный способ - «кэшировать» последнее значение:
li = [1, 1, 2, 2, 3, 3, 1, 1, 2, 1, 2, 3]
previous = None
for index, n in enumerate(li):
if previous is None:
previous = n
continue
if previous != n:
print(index)
previous = n
выходы
2
4
6
8
9
10
11