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

在Python中使用函数将列表排序

发布时间:2023-06-19 04:49:01

在Python中,可以使用内建函数sorted()或sort()来对列表进行排序。

sorted()函数

sorted()函数可以对任何可迭代对象进行排序(不仅限于列表),并且不修改原始对象,而是返回一个新的已排序的列表。

该函数的语法如下:

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

其中,iterable表示要排序的可迭代对象,key是用于排序的函数(可选),reverse指定排序顺序是升序还是降序(默认升序)。

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

import random

my_list = [random.randint(1, 100) for _ in range(10)]
print(my_list)  # [71, 53, 98, 90, 90, 17, 36, 46, 98, 63]

sorted_list = sorted(my_list)
print(sorted_list)  # [17, 36, 46, 53, 63, 71, 90, 90, 98, 98]

sort()方法

除了sorted()函数之外,Python中的列表还具有一个sort()方法,该方法在原始列表上直接进行排序操作,不会返回一个新的列表。sort()方法的语法如下:

list.sort(key=None, reverse=False)

与sorted()函数相似,key参数和reverse参数也可以使用,但不需要传入可迭代对象,因为该方法会直接修改调用它的列表。例如,以下代码使用sort()方法对my_list进行排序:

my_list.sort()
print(my_list)  # [17, 36, 46, 53, 63, 71, 90, 90, 98, 98]

如何自定义排序规则?

有时候,列表中的元素可能不是基本类型(如int、float、str等),而是一个自定义的对象。在这种情况下,我们可能需要自定义排序规则。假设我们有一个学生类,每个学生类都有姓名和年龄两个属性,现在有一个学生列表,我们想按照年龄从小到大排序,当年龄相同时按照姓名的字母顺序排序。可以使用sorted()函数的key参数来实现:

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

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

students = [Student('Alice', 25), Student('Bob', 25), Student('Charlie', 22), Student('David', 23)]

sorted_students = sorted(students, key=lambda s: (s.age, s.name))
print(sorted_students)
# [Charlie(22), David(23), Alice(25), Bob(25)]

这里使用了匿名函数作为key参数,lambda s: (s.age, s.name)表示先按照年龄排序,年龄相同时再按照姓名排序。

总结

Python中的sorted()函数和sort()方法都可以对列表进行排序。sorted()函数返回一个新的已排序的列表,sort()方法修改原始列表。可以使用key参数来自定义排序规则。