# [ACCEPTED]-Python: Find the min, max value in a list of tuples-graphics

Score: 64
``````map(max, zip(*alist))
``````

This first unzips your list, then finds 3 the max for each tuple position

``````>>> alist = [(1,3),(2,5),(2,4),(7,5)]
>>> zip(*alist)
[(1, 2, 2, 7), (3, 5, 4, 5)]
>>> map(max, zip(*alist))
[7, 5]
>>> map(min, zip(*alist))
[1, 3]
``````

This will 2 also work for tuples of any length in a 1 list.

Score: 8
``````>>> from operator import itemgetter
>>> alist = [(1,3),(2,5),(2,4),(7,5)]
>>> min(alist), max(alist)
(1, 7)
>>> min(alist, key=itemgetter(1)), max(alist, key=itemgetter(1))
(3, 5)
``````

0

Score: 4

The `zip` is not necessary, so this simplifies 2 to `map(max, *data)` (where `data` is an iterator over tuples or 1 lists of the same length).

Score: 3

A generalized approach would be something 4 like this:

``````alist = [(1,6),(2,5),(2,4),(7,5)]

temp = map(sorted, zip(*alist))
min_x, max_x, min_y, max_y = temp, temp[-1], temp, temp[-1]
``````

For Python 3, you'd need change 3 the line that creates`temp`to:

``````temp = tuple(map(sorted, zip(*alist)))
``````

The idea can be 2 abstracted into a function which works in 1 both Python 2 and 3:

``````from __future__ import print_function
try:
from functools import reduce  # moved into functools in release 2.6
except ImportError:
pass

def minmaxes(seq):
pairs = tuple()
for s in map(sorted, zip(*seq)):
pairs += (s, s[-1])
return pairs

# functional version
def minmaxes(seq):
return reduce(tuple.__add__, ((s, s[-1]) for s in map(sorted, zip(*seq))))

alist = [(1,6), (2,5), (2,4), (7,5)]
min_x, max_x, min_y, max_y = minmaxes(alist)
print(' '.join(['{},{}']*2).format(*minmaxes(alist)))  # 1,7 4,6

triplets = [(1,6,6), (2,5,3), (2,4,9), (7,5,6)]
min_x, max_x, min_y, max_y, min_z, max_z = minmaxes(triplets)
print(' '.join(['{},{}']*3).format(*minmaxes(triplets)))  # 1,7 4,6 3,9
``````
Score: 0

Another solution using enumerate and list 1 comprehension

``````alist = [(1,3),(2,5),(2,4),(7,5)]

for num, k in enumerate(['X', 'Y']):
print 'max_%s' %k, max([i[num] for i in alist])
print 'min_%s' %k, min([i[num] for i in alist])
``````
Score: 0

For python 3:

``````alist = [(1,3),(2,5),(2,4),(7,5)]
[x_range, y_range] = list(zip(map(min, *test_list), map(max, *alist)))

print(x_range, y_range) #prints: (1, 7) (3, 5)
``````

Since zip/map returns an iterator 1 `<object at 0x00>` you need to use `list()`

More Related questions