Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在坐标列表中找到角点?_Python_Coordinates - Fatal编程技术网

Python 如何在坐标列表中找到角点?

Python 如何在坐标列表中找到角点?,python,coordinates,Python,Coordinates,我有以下代码的样式/性能问题: dq=((410, -890), (490, -890), (490, -790), (590, -790), (590, -710), (490, -710), (490, -590), (590, -590), (590, -510), (490, -510), (490, -410), (410, -410), (410, -510), (310, -510), (310, -590), (410, -590), (410, -

我有以下代码的样式/性能问题:

dq=((410, -890), (490, -890), (490, -790), (590, -790), (590, -710), 
    (490, -710), (490, -590), (590, -590), (590, -510), (490, -510), 
    (490, -410), (410, -410), (410, -510), (310, -510), (310, -590), 
    (410, -590), (410, -710), (310, -710), (310, -790), (410, -790))
maxy=max([q[1] for q in dq])
minx=min([q[0] for q in dq if q[1]==maxy])
idx=dq.index((minx,maxy))
我有一个坐标列表,我想找到具有最大Y值和最小X值的索引


有没有更好的/python式的方法来实现这一点?

如果您更喜欢函数式代码:

get_x = operator.itemgetter(0)
get_y = operator.itemgetter(1)
maxy = max(dq, key=get_y)
minx = min(filter(lambda item: item[1] == maxy, dq), key=get_x)
就我个人而言,我更喜欢生成器的理解,但有些人对这种代码深信不疑。

我会用这种方法来解决:

maxy=max(q[1] for q in dq)
minx=min((q[0],idx) for idx,q in enumerate(dq) if q[1]==maxy)
idx=minx[1]
我觉得它不太可读,但我需要少一次迭代


谢谢,@Kevin和@Bhargav

另一个选项是将关键功能传递给:


在这里,当我们处理数字时,我们可以使用符号翻转技巧来交换最小值和最大值。

如果
dq=((3,2)、(4,3))
,您希望返回什么?现在,您将返回
(4,3)
。对吗?@Kevin想象我有一个正方形:
dq=((0,1),(1,1),(1,0),(0,0)
。我想返回
idx=0
,因为dq在索引0处有一个元组,X值越低,Y值越大。@NicolaySnet但是Nicola在这个解决方案中,团队之间的承诺呈现了返回int或bool的趋势,允许维护结构体相对于其类的位置。为什么不呢将值minx和maxy倒置?很好!我认为这是最快的解决方案,最多使用Python的元组顺序。@NicolaySnet:如果性能是此类任务的一个问题,那么您使用的语言是错误的。:-)
>>> max(enumerate(dq), key=lambda x: (x[1][1], -x[1][0]))
(11, (410, -410))
>>> idx, maxval = max(enumerate(dq), key=lambda x: (x[1][1], -x[1][0]))
>>> idx
11