Python中的sorted()函数:如何按特定方式排序?
sorted()函数是Python内置函数之一,用于对可迭代对象进行排序。它接受一个可选的关键字参数,用于指定排序方式。
sorted()函数默认按照元素的大小进行升序排序。例如:
numbers = [4, 2, 7, 1, 9] sorted_numbers = sorted(numbers) print(sorted_numbers)
输出结果为:[1, 2, 4, 7, 9]
如果想要按照元素的大小进行降序排序,可以使用reverse参数:
numbers = [4, 2, 7, 1, 9] sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers)
输出结果为:[9, 7, 4, 2, 1]
除了使用reverse参数,还可以使用key参数来指定排序方式。key参数接受一个函数,该函数将应用于每个元素并返回一个排序依据。
例如,如果想要按照元素的绝对值大小进行排序,可以使用abs()函数作为key参数:
numbers = [-4, 2, -7, 1, -9] sorted_numbers = sorted(numbers, key=abs) print(sorted_numbers)
输出结果为:[1, 2, -4, -7, -9]
在这个例子中,abs()函数计算每个元素的绝对值,并将绝对值作为排序依据。
另外一个常见的用法是按照某个属性进行排序。例如,如果有一个包含学生对象的列表,每个学生对象都有一个age属性,可以使用lambda表达式作为key参数来按照age属性进行排序:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
students = [Student('Alice', 25), Student('Bob', 18), Student('Charlie', 35)]
sorted_students = sorted(students, key=lambda student: student.age)
for student in sorted_students:
print(student.name, student.age)
输出结果为:
Bob 18 Alice 25 Charlie 35
在这个例子中,lambda表达式lambda student: student.age将每个学生对象映射到它们的age属性,并将age作为排序依据。
除了升序和降序排序外,还可以创建自定义的排序函数,并使用该函数作为key参数。例如,如果想要按照字符串的长度进行排序,可以编写一个比较函数来对字符串进行排序:
def compare_length(string):
return len(string)
strings = ['apple', 'banana', 'cherry']
sorted_strings = sorted(strings, key=compare_length)
print(sorted_strings)
输出结果为:['apple', 'cherry', 'banana']
在这个例子中,compare_length函数返回每个字符串的长度,并将长度作为排序依据。
总结来说,如果想要按照特定方式排序,可以使用sorted()函数的key参数来指定排序方式。key参数接受一个函数或lambda表达式,该函数将应用于每个元素并返回一个排序依据。通过灵活应用key参数,可以实现非常复杂的排序方式。
