2010-10-09 4 views
1

J'ai le tableau suivant:Python: comment puis-je trouver les valeurs minimales et maximales dans les éléments de sous-matrices?

[[499, 3], [502, 3], [502, 353], [499, 353]] 

Ils sont les verteces d'un rectangle.

J'ai besoin de trouver le sommet en haut à gauche, en haut à droite, en bas à gauche et en bas à droite.

Quel est le meilleur code Python pour le faire?

grâce

+0

@systempuntoout quel est le problème? N'est-ce pas un tableau? – aneuryzm

+0

En Python, vous devriez appeler cette structure de données une [liste] (http://docs.python.org/tutorial/datastructures.html); il existe d'autres modules qui fournissent des objets de tableau ([tableau] (http://docs.python.org/library/array.html) et [numpy] (http://www.scipy.org/Tentative_NumPy_Tutorial)) – systempuntoout

Répondre

2

modifier: grâce à tokand de remarquer que cela peut être fait avec déballer tuple.

vous pourriez le trier.

(bottomleft, bottomright,topleft, topright) = sorted(vertices) 

ou vous pouvez le faire en place avec

corners.sort() 
(bottomleft, bottomright,topleft, topright) = corners 
# the unpacking here is redundant but demonstrative 

Pour référence, la sortie des déchets triés est:

>>> a = [[499, 3], [502, 3], [502, 353], [499, 353]] 
>>> sorted(a) 
[[499, 3], [499, 353], [502, 3], [502, 353]] 
>>> 

Ce sera O (nlogn) alors qu'il ya sûrement O (n) les solutions disponibles. Mais pour une liste de cette taille, je ne pense pas que ce soit un gros problème à moins que vous en ayez une tonne (dans ce cas, la vitesse de l'implémentation C native surpasse une fonction python personnalisée de toute façon perspective.)

+1

le même idée avec tuple déballage: topleft, topright, bottomleft, bottomright = trié (sommets) – tokland

+0

@tokland, bonne idée. Je devais juste faire passer le message, je suppose. C'est probablement comme ça que je l'écrirais. – aaronasterling

0
vertices = [[499, 3], [499, 353], [502, 3], [502, 353]] 

# if the origin is the top left 
(topleft, bottomleft, topright, bottomright) = sorted(vertices) 

# if the origin is the bottom left 
(bottomleft, topleft, bottomright, topright) = sorted(vertices) 
Questions connexes