我有这段代码:
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。为什么会这样呢?
itemgetter(1)
,你要求Python基于第1个元素的值来获取最大元组。 (1,3,5)在第1个索引处有最大的元素(即3)。 然后你从那个元组中访问第2个索引(即5)。>>> max([c for a,b,c in vals])
6
key=itemgetter(1)
的意思是 max
检查 tuple
的第二个元素来确定哪个 tuple
是“最大的”tuple
。
因此,它选择第一个 tuple
,因为 3
比 2
更高,然后您选择最后一个值,您将获得 5
如果您想要 6
,我想您可以这样做:max(vals,key = itemgetter(2))[2]
但是您也可以获取索引2的值并执行max操作,如下所示:
"max(map(itemgetter(2),vals))
由于您正在丢弃其他值
-1
来表示。在您的代码中,1
选择每个元组的第二个元素进行max
比较,2
是不必要地硬编码了您的元组长度为三的知识。>>> vals = [(1,3,5),(2,2,5),(1,2,6)]
>>> max(vals, key=itemgetter(-1))[-1]
>>> 6
x[2]
是元组中用于计算最大值的第3个元素,[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
for _, _, c in vals
来避免命名未使用的变量是否合适? - jpp