如何对Coordinate列表进行自定义排序以得到预期结果?
自定义坐标排序解决方案
看起来你想要的排序规则是先把y值不等于42的坐标按x轴升序排列,再把y值等于42的坐标也按x轴升序排列放在后面——而不是单纯按x再y的全局排序。
实现代码
你可以通过自定义排序key来精准实现这个需求:
coordinates = [(229, 42), (159, 42), (50, 42), (114, 6), (52, 6), (308, 5), (193, 3)] sorted_coords = sorted(coordinates, key=lambda k: (1 if k[1] == 42 else 0, k[0])) print(sorted_coords)
运行结果
执行后会输出你预期的排序结果:
[(52, 6), (114, 6), (193, 3), (308, 5), (50, 42), (159, 42), (229, 42)]
逻辑解释
这个排序key是一个二元组,核心逻辑分为两步:
- 分组优先级:元组第一个元素
1 if k[1] ==42 else 0,给y=42的坐标标记为1,其余标记为0。因为默认是升序排序,所以标记为0的组(非y=42的坐标)会整体排在标记为1的组前面。 - 组内排序:元组第二个元素
k[0],让同一组内的坐标按x轴数值升序排列,完美匹配你预期的子组排序规则。
如果之后需要调整分组逻辑(比如区分其他特定y值),只需要修改第一个元素的判断条件即可。
内容的提问来源于stack exchange,提问作者Kylos Lam
相关产品推荐
相关产品推荐

