在元组列表中获取元素元组的最大值

时间:2018-10-24 15:30:49

标签: python arrays list

我有此代码:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals ,key=itemgetter(1))[2]

我的问题是:为什么它返回5而不是6?我需要最后一个元素的最大值。如果我采用max(...)[0],则给出2;如果我采用max(...)[1],则给出3;但是如果我采用max(...)[2],则给出5。为什么?

5 个答案:

答案 0 :(得分:2)

通过使用itemgetter(1)键控,您要求Python根据第1个元素的值采用最大元组 。 (1,3,5)在第1个索引(即3)中具有最大的元素。然后,您可以从该元组(即5)访问第二个索引。

要获取最后一个元素的最大值,请改用此值:

>>> max([c for a,b,c in vals])
6

答案 1 :(得分:1)

key=itemgetter(1)表示max检查tuple second 元素,确定哪个tuple是“最大”元组。

因此,由于3高于2,因此它选择第一个元组,然后选择最后一个值,然后得到5

如果您想要6,我想您可以max(vals ,key=itemgetter(2))[2]

但是您也可以获取索引2的值并执行以下最大值:

max(map(itemgetter(2),vals))

因为您要丢弃其他值

答案 2 :(得分:1)

如果需要最后一个元素,只需在代码中使用索引-1就可以了。在您的代码中,1max中选择每个元组的第二个元素进行比较,而2不必要地硬编码了元组的长度为三的知识。

>>> vals = [(1,3,5),(2,2,5),(1,2,6)]
>>> max(vals, key=itemgetter(-1))[-1]
>>> 6

答案 3 :(得分:0)

x[2]是元组的3个元素,应在其上计算max,而[2]是元组的第三个元素

max(vals ,key=lambda x:x[2])[2]

max(vals ,key=itemgetter(2))[2] # you were using itemgetter(1) which would be second element of the tuple

答案 4 :(得分:0)

如果我通过了 index ,我会这样做:

vals = [(1,3,5),(2,2,5),(1,2,6)]
max(vals[2])
#> 6