>>> pp = [('a',1),('b',1),('c',1),('d',2),('e',2)]
>>> [[t1, t2] for ((t1, v1), (t2, v2)) in zip(pp, pp[1:]) if v1 != v2] [0]
['c', 'd']
>>>
Мне нравится это для ясности ... если вы находите ясное понимание списка. Он создает два временных списка: pp [1:] и результат zip (). Затем он сравнивает все соседние пары и дает вам первое найденное изменение.
Это похожее выражение генератора не создает временные списки и останавливает обработку, когда оно достигает первого изменения:
>>> from itertools import islice, izip
>>> ([t1, t2] for ((t1, v1), (t2, v2)) in izip(pp, islice(pp, 1, None))
... if v1 != v2
... ).next()
['c', 'd']
>>>
Все примеры на этой странице более компактны, чем если бы вы хотели отлавливать ошибки.