如何对逆时针方向的元组列表进行排序?

SUB*_*AHU 4 python

我有一个具有(x,y)格式坐标的元组列表。我想按逆时针方向对其进行排序/排列。例如:

[(0,1),(3,1),(-1,0),(2,2)]
Run Code Online (Sandbox Code Playgroud)

排列的清单应为:

[(3,1),(2,2),(0,1),(-1,0)]
Run Code Online (Sandbox Code Playgroud)

注意:列表中可以有“ n”个元组,并且(0,0)可以是列表的一部分。

NPE*_*NPE 8

您可以使用2参数反正切来从(1,0)计算角度并将其排序:

>>> vec = [(0,1),(3,1),(-1,0),(2,2)]
>>> sorted(vec, key=lambda p: math.atan2(p[1], p[0]))  # atan2(y, x)
[(3, 1), (2, 2), (0, 1), (-1, 0)]
Run Code Online (Sandbox Code Playgroud)

阿坦2

(图片由维基百科提供。)

  • @blhsing:您是否有理由认为(0,0)不是OP所要求的?如果是这样,我可以简单地编辑答案以移动坐标系(所需要做的就是在lambda中减去两个)。 (2认同)