在Python中使用函数将列表排序
在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参数来自定义排序规则。
