MST

星途 面试题库

面试题:Python列表排序性能优化实践

假设你有一个包含大量自定义对象的Python列表,每个对象有多个属性,现在需要根据其中一个属性对列表进行排序,且要求排序性能尽可能高。请给出实现思路和关键代码片段,并分析如何避免可能出现的性能瓶颈。
39.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用Python内置的sorted函数或者列表的sort方法进行排序。
  2. 利用key参数指定根据对象的哪个属性进行排序。这两个方法在实现上都使用了高效的排序算法(如Timsort),适合大规模数据排序。

关键代码片段

class CustomObject:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2


custom_list = [CustomObject(3, 'b'), CustomObject(1, 'a'), CustomObject(2, 'c')]
# 使用sorted函数
sorted_list = sorted(custom_list, key=lambda obj: obj.attr1)
# 或者使用列表的sort方法
custom_list.sort(key=lambda obj: obj.attr1)

避免性能瓶颈

  1. 避免在key函数中进行复杂计算key函数应该尽量简单,仅返回用于比较的属性值。因为key函数会在每次比较时被调用,如果其中包含复杂计算,会显著增加排序的时间复杂度。
  2. 数据类型一致性:确保用于排序的属性数据类型一致。如果属性数据类型不一致,Python在比较时可能需要进行额外的类型转换操作,从而降低性能。例如,避免在同一列表中同时存在数字和字符串类型的待排序属性。
  3. 选择合适的排序方法:对于大规模数据,Python内置的sortedlist.sort使用的Timsort算法已经经过优化,性能较好。尽量避免自行实现复杂度较高的排序算法,除非有特殊需求。