Python 3.6.5中二维列表按总分排序的实现方法
Python二维列表按分数总分排序解决方案
嘿,我来帮你搞定这个问题!首先你写的sort方法调用有点小问题——list.sort()是列表的内置方法,不需要把列表本身作为第一个参数传进去,它会直接在原列表上进行修改。
然后关于key参数的部分,你只需要计算每个子列表里除第一个元素(名称)之外所有分数的总和就行啦。具体来说,用sum(x[1:])就可以实现:x[1:]会截取子列表从索引1开始的所有元素(也就是所有分数),sum()函数把这些分数加起来,这个总和就是我们排序的依据。
给你完整的正确代码:
a_list = [['name1', 5, 6, 3, 7], ['name3', 2, 6, 3, 6], ['name3', 2, 10, 8, 5]] # 按分数总分从高到低排序,不修改原字段 a_list.sort(key=lambda x: sum(x[1:]), reverse=True) print(a_list)
运行这段代码后,输出的结果会是:
[['name3', 2, 10, 8, 5], ['name1', 5, 6, 3, 7], ['name3', 2, 6, 3, 6]]
如果你不想修改原来的a_list,而是生成一个新的排序后的列表,可以用sorted()函数(它会返回新列表,原列表保持不变):
a_list = [['name1', 5, 6, 3, 7], ['name3', 2, 6, 3, 6], ['name3', 2, 10, 8, 5]] sorted_list = sorted(a_list, key=lambda x: sum(x[1:]), reverse=True) print(sorted_list)
两种方式都不会改动任何子列表里的名称或分数字段,只是调整了子列表的顺序,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Hugs
相关产品推荐
相关产品推荐

