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

`sorted()`函数用于对Python中的任何可迭代对象进行排序

发布时间:2023-06-25 04:52:05

sorted()函数是Python内置函数之一,它用于对任何可迭代对象进行排序。可迭代对象是指可以通过循环迭代获取元素的对象,例如列表、元组、集合、字典等。在实际编程中,我们经常需要对数据进行排序,sorted()函数就可以帮助我们实现这个需求。本文将详细介绍sorted()函数的用法和注意事项。

一、函数原型

sorted()函数原型如下:

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

参数解释:

- iterable:可迭代对象,可以是列表、元组、集合、字典等。

- key:排序依据,也就是排序的规则。如果未指定,则按照默认规则排序。

- reverse:排序顺序,True为降序,False为升序。默认为False。

返回值:

排序后的对象,如果输入的是列表、元组、集合,则返回列表;如果输入的是字典,则返回字典的键和值的元组组成的列表。

二、默认排序规则

默认情况下,sorted()函数是按照元素本身大小进行排序的。例如对于以下列表:

lst = [2, 5, 1, 3, 4]

直接使用sorted()函数进行排序:

sorted_lst = sorted(lst)

输出结果:

[1, 2, 3, 4, 5]

可以看到,默认情况下,sorted()函数按照元素本身大小进行生序排序,即从小到大。

三、自定义排序规则

如果需要按照自己的规则进行排序,可以通过key参数指定排序依据。key参数接受一个函数作为参数,用于指定排序时的依据,例如:

lst = [(2, 3), (1, 5), (4, 2), (3, 4)]

sorted_lst = sorted(lst, key=lambda x: x[1])

输出结果:

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

上面的代码是按照元素的第二个值进行升序排序的。lambda表达式的作用是返回元素的第二个值。

如果需要按照多个规则进行排序,可以使用多个key,例如:

lst = [('abc', 3), ('def', 1), ('abc', 2), ('def', 4)]

sorted_lst = sorted(lst, key=lambda x: (x[0], -x[1]))

输出结果:

[('abc', 3), ('abc', 2), ('def', 4), ('def', 1)]

上面的代码是先按照元素的 个值进行升序排序,如果 个值相同,则按照第二个值进行降序排序。

四、reverse参数

如果需要降序排序,可以将reverse参数设为True,例如:

lst = [2, 5, 1, 3, 4]

sorted_lst = sorted(lst, reverse=True)

输出结果:

[5, 4, 3, 2, 1]

可以看到,将reverse参数设为True之后,sorted()函数按照元素本身进行排序,但是是降序排序。

五、应用举例

sorted()函数可以用于各种可迭代对象的排序,以下是一些常见的应用举例:

1. 对字典进行排序:

dict_data = {'a': 5, 'b': 2, 'c': 7, 'd': 1}

sorted_dict = sorted(dict_data.items(), key=lambda x: x[1])

print(sorted_dict)

输出结果:

[('d', 1), ('b', 2), ('a', 5), ('c', 7)]

可以看到,该代码段对字典进行排序,返回一个按照值进行排序的键值对列表。

2. 对列表中的对象进行排序:

class Student:

    def __init__(self, name, age):

        self.name = name

        self.age = age

    def __repr__(self):

        return f'({self.name}, {self.age})'

students = [Student('Tom', 20), Student('Jerry', 22), Student('Lucy', 18)]

sorted_students = sorted(students, key=lambda x: x.age)

print(sorted_students)

输出结果:

[(Lucy, 18), (Tom, 20), (Jerry, 22)]

可以看到,该代码段对由Student对象组成的列表进行排序,返回一个按照年龄进行排序的Student对象列表。

六、注意事项

1. 对原可迭代对象不会进行修改,返回的是一个新的排序后的对象。

2. 对于不同的类型的可迭代对象,排序规则可能不同。

3. 在使用sorted()函数进行排序时,需要确认元素之间是可以比较大小的,否则会引发TypeError异常。

4. 在使用自定义排序规则时,要注意使得key返回的结果在比较时是可比较大小的。