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

Python中如何使用sorted函数对列表进行排序?

发布时间:2023-06-26 00:51:57

列表是Python中一种常见的序列数据类型,列表中的元素可以是任何对象,包括数字、字符串、元组、列表等。在实际的应用场景中,我们常常需要对一个列表中的元素进行排序,以便更方便地对其进行查找、统计、输出等操作。Python中提供了多种排序方法,而本篇文章将介绍其中的sorted函数。

1. sorted函数的基本使用方法

sorted函数是Python内置的排序函数,可以对一个列表进行排序,并返回一个新的排序后的列表。其基本语法如下:

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

其中,iterable是需要排序的可迭代对象,例如列表、元组、字符串等;key是一个函数,用于从每个元素中提取一个用于排序的关键字,用法类似与sort函数中的key参数;reverse是一个布尔值,表示是否按照反向顺序排序,默认值为False,表示升序排列。

例如,对一个包含随机整数的列表进行排序,可以使用以下代码:

import random

lst = [random.randint(0, 100) for _ in range(10)]

print("Original list: ", lst)

sorted_lst = sorted(lst)

print("Sorted list: ", sorted_lst)

运行结果如下:

Original list:  [93, 76, 75, 95, 63, 57, 0, 69, 43, 27]

Sorted list:  [0, 27, 43, 57, 63, 69, 75, 76, 93, 95]

2. sorted函数的高级应用

除了基本用法之外,sorted函数还提供了许多高级用法,例如以下几个方面:

2.1 按照列表中元素的某个属性进行排序

假设有一个包含多个学生信息的列表,其中每个元素都是一个字典,包含学生的姓名、年龄和成绩等属性,现在需要按照成绩降序排列。可以使用以下代码:

students = [

    {"name": "Tom", "age": 18, "score": 90},

    {"name": "Jerry", "age": 17, "score": 80},

    {"name": "Alice", "age": 19, "score": 95},

    {"name": "Bob", "age": 20, "score": 85}

]

sorted_students = sorted(students, key=lambda x: x['score'], reverse=True)

for student in sorted_students:

    print(student)

其中,key参数指定了一个lambda函数,用于从每个学生中提取其成绩属性,并作为排序的关键字。

结果如下:

{'name': 'Alice', 'age': 19, 'score': 95}

{'name': 'Tom', 'age': 18, 'score': 90}

{'name': 'Bob', 'age': 20, 'score': 85}

{'name': 'Jerry', 'age': 17, 'score': 80}

2.2 多级排序

如果存在多个排序关键字,可以使用多级排序来实现。例如,在上述的学生列表中,需要先按照成绩降序排列,再按照年龄升序排列。可以使用以下代码:

sorted_students = sorted(students, key=lambda x: (-x['score'], x['age']))

for student in sorted_students:

    print(student)

其中,lambda函数返回一个元组,元组中的 个元素是一个负数,表示成绩的负值,以实现降序排序;元组中的第二个元素是年龄,以实现升序排序。

运行结果如下:

{'name': 'Alice', 'age': 19, 'score': 95}

{'name': 'Tom', 'age': 18, 'score': 90}

{'name': 'Bob', 'age': 20, 'score': 85}

{'name': 'Jerry', 'age': 17, 'score': 80}

2.3 按照自定义的规则进行排序

如果希望按照一些特定的规则进行排序,例如将首字母相同的字符串放在一起,可以自定义一个函数来作为排序的key参数。例如:

words = ["banana", "apple", "pineapple", "pear", "peach", "palm"]

def sort_by_first_letter(word):

    return ord(word[0])

sorted_words = sorted(words, key=sort_by_first_letter)

print(sorted_words)

其中,sort_by_first_letter函数返回字符串的首字母的ASCII码值,用于作为排序关键字。

运行结果如下:

['apple', 'banana', 'pear', 'peach', 'pineapple', 'palm']

2.4 复杂对象的排序

如果需要对一组复杂的对象进行排序,需要定义一个用于比较的规则。例如,在以下的代码中,需要对一组测量得到的三维坐标进行排序,可以按照以下规则进行排序:先按照x坐标排序,若x坐标相等,则按照y坐标排序,若y坐标相等,则按照z坐标排序。

class Point:

    def __init__(self, x, y, z):

        self.x, self.y, self.z = x, y, z

    def __repr__(self):

        return f"({self.x}, {self.y}, {self.z})"

points = [

    Point(1, 2, 3),

    Point(0, 2, 3),

    Point(1, 1, 1),

    Point(0, 1, 2),

    Point(1, 2, 1)

]

def sort_points(p):

    return (p.x, p.y, p.z)

sorted_points = sorted(points, key=sort_points)

print(sorted_points)

其中,sort_points函数返回一个元组,用于作为排序关键字。

运行结果如下:

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

3. 总结

sorted函数是Python内置的排序函数,可以按照不同的规则对一个可迭代对象进行排序,并返回一个新的排序后的列表。除了基本的排序功能之外,sorted函数还提供了许多高级功能,例如多级排序、自定义规则、复杂对象的排序等。使用sorted函数可以方便地对一个列表进行排序,并提高代码的可读性和可维护性。