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

如何按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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30