2010-10-09 112 views
1

我有以下數組:Python:我如何在子數組元素中找到最小值和最大值?

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

他們是一個長方形的verteces。

我需要找到左上角,右上角,左下角和右下角的頂點。

什麼是最好的Python代碼來做到這一點?

感謝

+0

@systempuntoout出了什麼問題?不是一個數組? – aneuryzm 2010-10-09 21:48:41

+0

在Python中,您應該調用該數據結構a [list](http://docs.python.org/tutorial/datastructures.html);還有其他模塊可以提供數組對象([array](http://docs.python.org/library/array.html)和[numpy](http://www.scipy.org/Tentative_NumPy_Tutorial)) – systempuntoout 2010-10-09 22:01:41

回答

2

編輯:感謝tokand的指出,這可以與元組拆包來完成。

您可以對其進行排序。

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

,或者你可以用

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

僅供參考做到位,有序輸出爲:

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

這將是O(nlogn),而有一定Ø (n)解決方案。但是對於這個大小的列表,除非你有很多這樣的大小,否則我不認爲它是一個biggy(在這種情況下,本地C實現的速度將超越自定義python函數,所以它仍然是實用的透視圖。)

+1

想法與tuple解包:topleft,topright,bottomleft,bottomright =排序(頂點) – tokland 2010-10-09 21:40:33

+0

@tokland,好主意。我猜想我剛剛得到了這個觀點。這可能是我真正寫的。 – aaronasterling 2010-10-09 21:41:48

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) 
相關問題