如何按surface()方法对Shape类实例列表从大到小排序?
解决方案
要实现Shape实例按表面积从大到小排序,最简洁高效的方式是利用Python内置的sorted()函数或列表的sort()方法,配合key参数指定排序依据,再通过reverse=True实现倒序。
方法1:返回新排序列表(不修改原列表)
使用sorted()函数,它会生成一个新的排序后的列表,原列表保持不变:
def sort_list(list_shapes): return sorted(list_shapes, key=lambda shape: shape.surface(), reverse=True)
方法2:原地排序(修改原列表)
如果不需要保留原列表,用列表的sort()方法更节省内存,它会直接在原列表上排序:
def sort_list(list_shapes): list_shapes.sort(key=lambda shape: shape.surface(), reverse=True) return list_shapes # 可选,若需要返回排序后的列表
为什么这是最优方案
- 这两种方法基于Python内置的Timsort算法,时间复杂度为O(n log n),是Python中效率最高的排序实现。
key参数只会为每个Shape实例计算一次表面积,比自定义比较函数(如functools.cmp_to_key)更高效,避免了重复计算。- 代码简洁直观,可读性极强,符合Python的"优雅"设计原则。
测试验证
可以通过以下代码验证功能:
# 创建测试用的Shape实例 test_shapes = [ Shape(2, 3), # 表面积6.0 Shape(5, 5), # 表面积25.0 Shape(1, 10) # 表面积10.0 ] # 调用排序函数 sorted_shapes = sort_list(test_shapes) # 打印结果验证 for s in sorted_shapes: print(s.surface()) # 输出顺序:25.0, 10.0, 6.0
你之前尝试失败的可能原因
如果之前用sorted()或sort()没成功,大概率是没正确指定key参数:直接排序Shape实例时,Python不知道如何比较两个Shape对象,必须通过key告诉它用surface()的返回值作为排序依据;另外如果没加reverse=True,会默认按从小到大排序,不符合你的需求。
内容的提问来源于stack exchange,提问作者T D
相关产品推荐
相关产品推荐

