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
相关产品推荐
相关产品推荐

