如何基于数组中两个元素对数组列表按图中上下左右顺序排序?
解决方法
你的问题出在两次独立排序的逻辑上:第二次排序会完全覆盖第一次的排序结果,而且排序优先级搞反了。要实现从上到下、从左到右的排序,应该直接用复合排序键,先按行(top值)分组,再按列(left值)排序。
正确代码
sorted_list = sorted(my_list, key=lambda x: (x[3][3], x[3][2]))
逻辑说明
- 元组
(x[3][3], x[3][2])作为排序键时,Python会先按第一个元素(top值)升序排序——因为top值越小,元素在图片里越靠上,满足从上到下的顺序。 - 当两个元素的
top值接近(属于同一行)时,会再按第二个元素(left值)升序排序——left值越小,元素越靠左,满足同一行内从左到右的顺序。
为什么之前的方法不行
你先按left排序、再按top排序的操作,第二次排序会完全基于top重新排列,之前按left排好的顺序会被打乱,自然无法保证同一行内从左到右的顺序。而且排序的优先级应该是先行后列,而不是先列后行。
内容的提问来源于stack exchange,提问作者InterestingPenguin80
相关产品推荐
相关产品推荐

