Un enfoque generalizado sería algo como esto:
alist = [(1,6),(2,5),(2,4),(7,5)]
temp = map(sorted, zip(*alist))
min_x, max_x, min_y, max_y = temp[0][0], temp[0][-1], temp[1][0], temp[1][-1]
Para Python 3, que había necesidad de cambiar la línea que crea temp
a:
temp = tuple(map(sorted, zip(*alist)))
La idea puede ser resumido en una función que funciona tanto en Python 2 como en 3:
from __future__ import print_function
try:
from functools import reduce # moved into functools in release 2.6
except ImportError:
pass
# readable version
def minmaxes(seq):
pairs = tuple()
for s in map(sorted, zip(*seq)):
pairs += (s[0], s[-1])
return pairs
# functional version
def minmaxes(seq):
return reduce(tuple.__add__, ((s[0], 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
¿Cuántas veces usted quiere recorrer la lista? (4 veces, 2 veces o 1 veces). – kennytm