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

Python中的sorted()函数:如何根据自定义键对列表排序?

发布时间:2023-06-22 16:21:48

Python的sorted()函数是一种简单而灵活的排序工具,可以用于对列表、元组或任何可以迭代的对象进行排序。其原型如下:

sorted(iterable, key=None, reverse=False)

其中,iterable表示要排序的对象,可以是列表、元组或任何可以迭代的对象;key表示排序的关键字,reverse表示是否要逆序排序。

当默认情况下,sorted()函数会按照元素的大小进行排序。例如,对于一个数字列表,它会按照数字的大小顺序进行排序。但是,在某些情况下,需要按照其它的方式进行排序,比如按照字符串长度、按照字典序、按照对象的某个属性等。

我们可以利用key参数来指定自定义键。这个函数应该以每个元素作为输入并返回一个值,这个值将用于排序。例如,以下代码用于将一个字符串列表按照字符串长度排序:

sorted(["apple", "banana", "orange", "pear"], key=len)

这个函数将返回一个按照字符串长度排序的新列表。输出如下所示:

['pear', 'apple', 'banana', 'orange']

在这种情况下,我们使用了len函数来计算每个元素的长度,然后按照长度大小进行排序。同样的,我们也可以指定其它的排序方式。例如,将一个含有元组的列表按照元素对应位置上的字典序排序,代码如下:

sorted([(3, 1), (1, 2), (2, 3)], key=lambda x: x[1])

这里我们使用了lambda函数,也就是匿名函数的一种形式。它可以接受任何参数,x表示每个元素,x[1]表示在元素x中获取第2个位置上的元素,也就是一个数字。排序后的结果如下:

[(3, 1), (1, 2), (2, 3)]

可以看到,按照第2个元素排序后,列表中的元素保持不变。

除了使用lambda函数以外,我们还可以定义一个自定义函数来进行排序。例如,对于一个包含对象的列表,可以按照对象某个属性值进行排序:

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age

    def __repr__(self):

        return f"{self.name}({self.age})"

people = [Person("Tom", 20), Person("Jerry", 18), Person("Mike", 25)]

sorted(people, key=lambda p: p.age)

这里我们定义了一个Person类,一个类的实例代表一个人,具有名字和年龄两个属性。sorted()函数会对包含多个Person对象的列表按照它们的年龄属性进行排序。结果如下:

[Tom(20), Jerry(18), Mike(25)]

可以看到,Tom在前面,Jerry在最前面,因为按年龄排序,Tom年龄最小。

总之,Python中的sorted()函数是一个灵活、易用的排序工具。借助它的key参数,我们可以对列表按照自定义的方式进行排序,使得代码的可读性、可维护性等方面都得到提升。