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

Python中使用sorted函数做什么?如何指定自定义排序规则?

发布时间:2023-06-26 13:29:49

sorted函数是Python中内置的一个非常强大的函数,它用于对某个可迭代对象(比如列表、元组等)进行排序操作,并返回一个新的已排序的对象。

使用sorted函数非常简单,只需要传入要进行排序的可迭代对象即可:

numbers = [3, 1, 4, 2, 7, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 输出 [1, 2, 3, 4, 5, 6, 7]

上面的例子中,我们传入了一个列表numbers,并使用sorted函数对其进行排序,结果保存在变量sorted_numbers中。程序输出了已排序的列表。

在默认情况下,sorted函数会按照元素本身的大小进行排序(比如上面的例子中,元素是整数,按照数值大小进行排序)。但如果要对自定义类型的对象进行排序,例如下面的Person类的实例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'{self.name}({self.age})'

我们可以借助sorted函数的key参数来指定排序规则。例如,我们可以根据Person实例的年龄进行排序,代码如下:

people = [Person('Tom', 20), Person('Jerry', 18), Person('Alice', 22)]
sorted_people = sorted(people, key=lambda p: p.age)
print(sorted_people)  
# 输出 [Jerry(18), Tom(20), Alice(22)]

在上面的代码中,我们传入了一个lambda函数作为key参数,这个lambda函数接收一个Person对象作为参数,返回其age属性,表示按照年龄进行排序。

还可以使用reverse参数来指定排序的顺序,例如下面的代码将人员按照年龄从大到小进行排序:

sorted_people = sorted(people, key=lambda p: p.age, reverse=True)
print(sorted_people)  
# 输出 [Alice(22), Tom(20), Jerry(18)]

除了lambda函数之外,还可以使用自定义函数作为key参数,例如:

def get_name_length(p):
    return len(p.name)
sorted_people = sorted(people, key=get_name_length)

这个例子中,我们定义了一个名为get_name_length的函数,这个函数接收一个Person对象作为参数,返回其name属性的长度,表示按照名字长度进行排序。

总之,sorted函数提供了非常灵活的排序功能,可以满足各种排序需求,是Python编程中不可或缺的一个函数。