我有以下數組:Python:我如何在子數組元素中找到最小值和最大值?
[[499, 3], [502, 3], [502, 353], [499, 353]]
他們是一個長方形的verteces。
我需要找到左上角,右上角,左下角和右下角的頂點。
什麼是最好的Python代碼來做到這一點?
感謝
我有以下數組:Python:我如何在子數組元素中找到最小值和最大值?
[[499, 3], [502, 3], [502, 353], [499, 353]]
他們是一個長方形的verteces。
我需要找到左上角,右上角,左下角和右下角的頂點。
什麼是最好的Python代碼來做到這一點?
感謝
編輯:感謝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函數,所以它仍然是實用的透視圖。)
想法與tuple解包:topleft,topright,bottomleft,bottomright =排序(頂點) – tokland 2010-10-09 21:40:33
@tokland,好主意。我猜想我剛剛得到了這個觀點。這可能是我真正寫的。 – aaronasterling 2010-10-09 21:41:48
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)
@systempuntoout出了什麼問題?不是一個數組? – aneuryzm 2010-10-09 21:48:41
在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