如何用Python按列表内元组的两个值进行优先级排序?
Python按自定义元组规则排序列表
需求明确
你需要对以下结构的列表排序:
my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]]
每个元素是[标识字符串, (x坐标, y坐标)],排序规则为:
- 优先按y坐标降序排列(对应图像从上到下的顺序,y值越大越靠上)
- 当y坐标相同时,按x坐标降序排列
实现方法
Python的sorted()函数或列表的.sort()方法都能轻松实现,核心是通过key参数定义排序依据,利用负号将降序需求转换为默认的升序排序逻辑。
方法1:返回新排序后的列表(不修改原列表)
my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]] sorted_list = sorted(my_list, key=lambda item: (-item[1][1], -item[1][0])) print(sorted_list)
方法2:直接修改原列表
my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]] my_list.sort(key=lambda item: (-item[1][1], -item[1][0])) print(my_list)
代码解释
lambda item: (-item[1][1], -item[1][0])是匿名函数,为每个列表元素生成排序用的键:item[1][1]取元素中的y坐标,加负号后,y值越大的元素键值越小,在默认升序排序中会排在前面,等价于y降序- 当y坐标相同时,再比较
-item[1][0](x坐标的负值),x值越大的元素键值越小,排在前面,等价于x降序
输出结果
两种方法都会得到你需要的排序结果:
[['A2', (6, 11)], ['U1', (2, 9)], ['P9', (1, 9)], ['X', (10, 4)], ['A', (3, 4)]]
内容的提问来源于stack exchange,提问作者InterestingPenguin80
相关产品推荐
相关产品推荐

