如何按第二个元素降序、第三个元素升序排序嵌套列表?
Python嵌套列表按指定规则排序
要实现按子列表第二个元素取最大值优先、第三个元素取最小值优先的排序,可以利用Python内置的sorted()函数或列表的sort()方法,通过自定义排序键来实现:
方法1:使用sorted()函数(返回新列表)
l = [ ["I", 2, 3], ["You", 3, 2], ] # 自定义排序键:第二个元素取负(实现降序),第三个元素直接取(实现升序) sorted_list = sorted(l, key=lambda x: (-x[1], x[2])) print(sorted_list) # 输出结果:[['You', 3, 2], ['I', 2, 3]]
方法2:使用sort()方法(原地修改列表)
如果不需要保留原列表,可以直接用列表的sort()方法进行原地排序:
l = [ ["I", 2, 3], ["You", 3, 2], ] l.sort(key=lambda x: (-x[1], x[2])) print(l) # 输出结果:[['You', 3, 2], ['I', 2, 3]]
原理说明
排序键lambda x: (-x[1], x[2])的作用:
-x[1]:将子列表的第二个元素取负数,这样sorted()默认的升序排序会把原数值更大的元素排在前面,实现第二个元素降序(最大值优先)。x[2]:当两个子列表的第二个元素相同时,会按照第三个元素的升序排列,实现第三个元素最小值优先。
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

