Python中的sort()函数:如何对列表元素进行排序
Python中的sort()函数是列表类型的一个内置函数,它可以帮助我们对一个列表的元素进行排序。sort函数支持对数字和字符串类型的元素进行排序,也支持自定义的排序规则。
sort()函数的语法如下:
list.sort(key=None, reverse=False)
其中,key表示排序规则,可以是一个函数或lambda表达式,用来指定按照什么规则进行排序;reverse表示是否逆序排序,默认为False,表示升序排序。
对于数字类型的元素,sort()函数的用法比较简单,直接调用sort()函数即可。例如:
num_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3] num_list.sort() print(num_list)
输出结果为:
[1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
对于字符串类型的元素,sort()函数默认按照ASCII码值进行排序。例如:
str_list = ["apple", "banana", "orange", "grape"] str_list.sort() print(str_list)
输出结果为:
['apple', 'banana', 'grape', 'orange']
从输出结果可以看出,sort()函数默认按照字符串的ASCII码值进行升序排序。
如果我们想按照字符串的长度进行排序,可以使用key参数。例如:
str_list = ["apple", "banana", "orange", "grape"] str_list.sort(key=lambda x: len(x)) print(str_list)
输出结果为:
['apple', 'grape', 'banana', 'orange']
从输出结果可以看出,sort()函数按照字符串的长度进行升序排序,lambda表达式指定了按照字符串的长度作为排序规则。
除此之外,我们还可以使用sort()函数对自定义的对象进行排序。例如,我们有一个学生对象,包含姓名(name)、年龄(age)和分数(score)三个属性。我们可以定义一个类来表示学生对象:
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def __repr__(self):
return f"{self.name}, {self.age}, {self.score}"
其中,__repr__()方法用于定义对象的字符串表示形式,这里返回一个字符串,包含学生对象的姓名、年龄和分数属性。
接下来,我们创建一个包含多个学生对象的列表,可以使用sort()函数按照学生对象的分数属性进行排序。例如:
stu_list = [Student(name="Tom", age=20, score=90),
Student(name="John", age=19, score=85),
Student(name="Mary", age=21, score=92),
Student(name="Peter", age=22, score=88)]
stu_list.sort(key=lambda x: x.score, reverse=True)
print(stu_list)
输出结果为:
[Mary, 21, 92, Tom, 20, 90, Peter, 22, 88, John, 19, 85]
从输出结果可以看出,sort()函数按照学生对象的分数属性进行逆序排序,lambda表达式指定了按照学生对象的分数属性作为排序规则。
需要注意的是,sort()函数是对当前列表进行排序的,如果希望对列表进行排序但不修改原列表,可以使用sorted()函数。例如:
num_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3] new_list = sorted(num_list) print(new_list) print(num_list)
输出结果为:
[1, 1, 2, 3, 3, 4, 5, 5, 6, 9] [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
从输出结果可以看出,sorted()函数返回一个新的排好序的列表,原列表并没有被更改。
综上所述,sort()函数是一个非常实用的函数,可以对Python中的列表元素进行排序。需要注意的是,在使用sort()函数时需要注意排序规则的定义,如果要自定义排序规则,可以使用lambda表达式或定义一个函数。
