2016-05-09 50 views
10

我想从元组列表中返回一个元组的最小第二个索引值(y值)。如果有两个具有最小y值的元组,则选择x值最大的元组(即第一个索引)。从元组列表中返回具有最小y值的元组

例如,假设我有元组:

x = [(2, 3), (4, 3), (6, 9)] 

的返回值应该是(4, 3)(2, 3)是候选人,因为x[0][1]3(与x[1][1]相同),但是,x[0][0]小于x[1][0]

到目前为止,我曾尝试:

start_point = min(x, key = lambda t: t[1]) 

然而,这只是检查第二索引,不比较两个元第一指标,如果他们的第二个索引的是等效的。

+5

你可以尝试这样的:'分钟(X,键=拉姆达T:[T [1],-t [0])' –

回答

16

x值包含在从关键字返回的元组中;当键值为y时,该键中的第二个元素将被使用。逆比较(从最小到最大),只是否定该值:

min(x, key=lambda t: (t[1], -t[0])) 

毕竟,-4-2小。

演示:

>>> x = [(2, 3), (4, 3), (6, 9)] 
>>> min(x, key=lambda t: (t[1], -t[0])) 
(4, 3) 
+0

为什么'-t负[0]'?这是没有批评,我只是不明白它... –

+3

@ByteCommander:因为在一个领带*应选择更大*'x'值,而不是更小。 –

+0

谢谢,完美的作品。只需要一行! – Seb