You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中list.sort()二次排序结果不符合预期的问题问询

解决list.sort()二次排序不符合预期的问题

嘿,我来帮你搞定这个排序问题~咱们先拆解下为什么当前结果和你的预期不一样,然后给出修正方案。

问题原因分析

你当前的排序key是lambda x: (a_list[x], b_list[x]),Python的sort()默认是升序排列。咱们看最后几个元素的对应值:

  • 索引9:a_list[9]=8,b_list[9]=2
  • 索引10:a_list[10]=8,b_list[10]=3
  • 索引11:a_list[11]=10,b_list[11]=10

当a_list的值相同时(比如索引9和10的a值都是8),会按照b_list的升序来排,2 < 3,所以索引9自然排在10前面,这就是你看到当前输出是[...,9,10,11]的原因。而你的预期是让a值相同的元素按b_list降序排列,所以需要调整排序的key逻辑。

修正方案

只需要把key里的b_list值取反,这样升序排序时,原本b值大的元素会因为负号后数值更小,排在前面,实现降序的效果:

index_list = list(range(12))
a_list = [5, 5, 5, 1, 2, 3, 3, 3, 3, 8, 8, 10]
b_list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 10]
# 修改key,对b_list的值取反实现降序
index_list.sort(key=lambda x: (a_list[x], -b_list[x]))
print(index_list)

运行这段代码,输出结果就是:
[3, 4, 5, 6, 7, 8, 0, 1, 2, 10, 9, 11]

完全符合你预期的最后三个元素[...,10,9,11]啦~

内容的提问来源于stack exchange,提问作者cckiki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:22:26