如何选择元组列表中的增加元素?

时间:2014-01-02 17:36:07

标签: python

我有以下元组列表:

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

我想选择元组中第二个值与前一个元素相比增加的元素。例如,我会选择(2, 4),因为4优于2,与我选择(4, 4)(6, 8)的方式相同。

这可以以比第二个元素明确开始的循环更优雅的方式完成吗?

为了澄清,我想选择第二个元素优于前一个元组的第二个元素的元组。

4 个答案:

答案 0 :(得分:2)

>>> [right for left, right in pairwise(a) if right[1] > left[1]]
[(2, 4), (4, 4), (6, 8)]

pairwise是一个itertools配方,你可以找到here

答案 1 :(得分:1)

您可以使用列表推导相当容易地执行此操作:

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]]

答案 2 :(得分:0)

您可以使用enumerate派生索引,然后进行列表理解:

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

答案 3 :(得分:-1)

您可以使用列表理解

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

返回

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

编辑:我对这个问题的理解不正确。上面的代码将返回第二个元素大于第一个元素的所有元组。这不是OP问的答案。