欢迎访问宙启技术站
智能推送

sortedcontainers库中的SortedListWithKey()函数用法解析

发布时间:2023-12-15 06:23:41

SortedListWithKey()函数是sortedcontainers库中的一个函数,用于创建一个有序的可变列表,列表中的每个元素都具有一个键值对。

该函数的语法如下:

SortedListWithKey(key=None, iterable=None)

参数:

- key:一个可调用对象,用于从每个元素中提取键。默认为None,表示元素本身就是键。

- iterable:一个可迭代对象,用于初始化列表。默认为None。

返回值:

一个新的SortedListWithKey对象。

该函数的使用示例如下:

from sortedcontainers import SortedListWithKey

# 使用元素本身作为键创建一个有序列表
lst1 = SortedListWithKey([3, 1, 2])
print(lst1)  # 输出:SortedListWithKey([1, 2, 3])

# 使用元素的某个属性作为键创建一个有序列表
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f'Person(name={self.name}, age={self.age})'

lst2 = SortedListWithKey(key=lambda x: x.age)
lst2.add(Person('Alice', 25))
lst2.add(Person('Bob', 20))
lst2.add(Person('Charlie', 30))

for person in lst2:
    print(person)
# 输出:
# Person(name=Bob, age=20)
# Person(name=Alice, age=25)
# Person(name=Charlie, age=30)

在上面的示例中,首先使用元素本身作为键创建了一个有序列表lst1,输出结果是[1, 2, 3],这是因为有序列表默认是升序排列的。

接下来,创建了一个类Person,该类有name和age两个属性,定义了__repr__()方法以便在打印对象时能够显示对象的属性。然后,使用元素的age属性作为键创建了另一个有序列表lst2,并向其中添加了三个Person对象,分别代表Alice、Bob和Charlie,他们的年龄分别为25、20和30。最后,遍历有序列表lst2,并打印每个Person对象,输出结果显示他们按照年龄从小到大的顺序排列。

总结:

SortedListWithKey()函数用于创建一个有序的可变列表,可以指定元素的键。通过指定不同的键,可以实现不同的排序方式。有序列表内部使用二分搜索树实现,具有高效的插入和查找性能。