我有以下元组列表:
a = [(1, 2), (2, 4), (3, 1), (4, 4), (5, 2), (6, 8), (7, -1)]
我想选择元组中第二个值与前一个元素相比增加的元素。例如,我会选择(2, 4)
,因为4
优于2
,与我选择(4, 4)
和(6, 8)
的方式相同。
这可以以比第二个元素明确开始的循环更优雅的方式完成吗?
为了澄清,我想选择第二个元素优于前一个元组的第二个元素的元组。
答案 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问的答案。