MST

星途 面试题库

面试题:Python中sorted函数在多条件及性能优化下的临时排序

有一个非常大的列表,其中的元素是自定义类的实例。自定义类有两个属性:weight(浮点数)和volume(浮点数)。要求使用sorted函数对这个列表进行临时排序,首先按weight从大到小排序,如果weight相同,则按volume从小到大排序。请考虑性能优化,避免不必要的计算,写出高效的实现代码,并阐述你在key函数中采取了哪些措施来提升性能,以及为什么这样做可以提升性能。
47.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class CustomClass:
    def __init__(self, weight, volume):
        self.weight = weight
        self.volume = volume

big_list = [CustomClass(1.5, 2.0), CustomClass(1.5, 1.0), CustomClass(2.0, 3.0)]

sorted_list = sorted(big_list, key=lambda x: (-x.weight, x.volume))

性能优化措施及原因

  1. key函数中直接返回元组:通过直接在key函数中返回(-x.weight, x.volume)这样的元组,利用Python内置的元组比较机制。Python会按照元组元素的顺序依次比较,所以这种方式简洁高效,避免了额外的比较逻辑实现。
  2. 使用负号处理反向排序:对于weight按从大到小排序,通过取-x.weight,这样在比较时就相当于对weight进行了反向排序,而无需自己实现复杂的反向比较逻辑,减少了计算量,提升了性能。