Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return tuple with smallest y value from list of tuples

I am trying to return a tuple the smallest second index value (y value) from a list of tuples. If there are two tuples with the lowest y value, then select the tuple with the largest x value (i.e first index).

For example, suppose I have the tuple:

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

The the value returned should be (4, 3). (2, 3) is a candidate, as x[0][1] is 3 (same as x[1][1]), however, x[0][0] is smaller than x[1][0].

So far I have tried:

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

However, this only checks the second index, and does not compare two tuples first index if their second index's are equivalent.

like image 382
Seb Avatar asked May 09 '16 08:05

Seb


People also ask

Which tuple function returns smallest element in tuple?

Python tuple method min() returns the elements from the tuple with minimum value.

Can we use MIN () in tuple?

min(): gives the smallest element in the tuple as an output. Hence, the name is min(). For example, max(): gives the largest element in the tuple as an output.


1 Answers

Include the x value in a tuple returned from the key; this second element in the key will be then used when there is a tie for the y value. To inverse the comparison (from smallest to largest), just negate that value:

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

After all, -4 is smaller than -2.

Demo:

>>> x = [(2, 3), (4, 3), (6, 9)]
>>> min(x, key=lambda t: (t[1], -t[0]))
(4, 3)
like image 130
Martijn Pieters Avatar answered Oct 19 '22 23:10

Martijn Pieters