Как выбрать увеличивающиеся элементы списка кортежей?

У меня есть следующий список кортежей:

a = [(1, 2), (2, 4), (3, 1), (4, 4), (5, 2), (6, 8), (7, -1)] 

Я хотел бы выбрать элементы, которые второе значение в кортеже увеличивается по сравнению с предыдущим. Например, я бы выбрал (2, 4) потому что 4 превосходит 2 , таким же образом я бы выбрал (4, 4) и (6, 8) .

Можно ли это сделать более элегантным способом, чем цикл, начинающийся явно со второго элемента?

Чтобы уточнить, я хочу выбрать кортежи, второй элемент которых превосходит второй элемент предыдущего кортежа.

Вы можете использовать понимание списка, чтобы сделать это довольно легко:

 a = [a[i] for i in range(1, len(a)) if a[i][1] > a[i-1][1]] 

Это использует range(1, len(a)) чтобы начать со второго элемента в списке, затем сравнивает второе значение в каждом кортеже со вторым значением из предыдущего кортежа, чтобы определить, должно ли оно быть в новом списке.

Кроме того, вы можете использовать zip для генерации пар соседних кортежей:

 a = [two for one, two in zip(a, a[1:]) if two[1] > one[1]] 
 >>> [right for left, right in pairwise(a) if right[1] > left[1]] [(2, 4), (4, 4), (6, 8)] 

Где pairwise рецепт itertools вы можете найти здесь .

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

 a = [t[1] for t in enumerate(a[1:]) if t[1][1] > a[t[0]-1][1]] 

Вы можете использовать понимание списка

 [i for i in a if (i[0] < i[1])] 

Возвращает

 [(1, 2), (2, 4), (6, 8)] 

Редактировать: Я был неверен в своем понимании вопроса. Вышеприведенный код вернет все кортежи, в которых второй элемент больше первого. Это не ответ на вопрос, который задал ОП.