如何使用Python的sorted()函数对列表进行升/降排序?
Python中的sorted()函数是用来对可迭代对象进行排序的函数,可以对列表进行升序或降序排序。它接受一个可迭代对象作为参数,并返回一个新的排好序的列表,而不会改变原始列表的顺序。
代码示例:
# 列表升序排序 numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] # 列表降序排序 sorted_numbers_desc = sorted(numbers, reverse=True) print(sorted_numbers_desc) # 输出: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
sorted()函数会创建一个新的列表,其中元素按照升序排列。可以通过reverse参数来指定是否降序排序,将其设置为True即可。
sorted()函数的返回值是一个新的列表,因此可以将其赋值给一个新的变量,或者直接打印出来。被排序的列表本身并不会发生变化,也就是说sorted()函数是非原地性的函数。
接下来我们将详细介绍sorted()函数,并讨论一些常见的应用场景。
1. 对数字列表进行排序
对一个由数字组成的列表进行排序是其中一个常见的应用场景。下面是一个示例:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
2. 对字符串列表进行排序
除了数字列表,sorted()函数也可以对字符串列表进行排序。下面是一个示例:
fruits = ['apple', 'banana', 'cherry', 'durian', 'fig'] sorted_fruits = sorted(fruits) print(sorted_fruits) # 输出: ['apple', 'banana', 'cherry', 'durian', 'fig']
字符串列表按字母顺序进行排序。
3. 对混合数据类型的列表进行排序
sorted()函数还可以对混合数据类型的列表进行排序。下面是一个示例:
mixed_data = [4, 'apple', 1.5, 'banana', 3, 'cherry'] sorted_mixed_data = sorted(mixed_data) print(sorted_mixed_data) # 输出: [1.5, 3, 4, 'apple', 'banana', 'cherry']
混合数据类型的列表将按照以下规则进行排序:首先按照数据类型排序(数字 < 字符串),然后按照字母顺序或者数值大小进行排序。
4. 对包含复杂对象的列表进行排序
如果列表中的元素是复杂对象,比如自定义类的实例,我们可以使用sorted()函数的key参数来指定排序的关键字。下面是一个示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f'Person(name={self.name}, age={self.age})'
people = [Person('Alice', 25), Person('Bob', 30), Person('Charlie', 20)]
sorted_people = sorted(people, key=lambda p: p.age)
print(sorted_people)
# 输出: [Person(name=Charlie, age=20), Person(name=Alice, age=25), Person(name=Bob, age=30)]
在这个示例中,我们创建了一个Person类,它有两个属性:name和age。我们希望按照age属性来对Person对象进行排序。通过lambda函数作为key参数,我们可以指定排序的关键字。
5. 对列表中的元素按照多个属性进行排序
如果列表中的元素是包含多个属性的对象,我们可以使用sorted()函数的多个key参数来按照多个属性进行排序。下面是一个示例:
class Student:
def __init__(self, name, age, grade):
self.name = name
self.age = age
self.grade = grade
def __repr__(self):
return f'Student(name={self.name}, age={self.age}, grade={self.grade})'
students = [
Student('Alice', 18, 'A'),
Student('Bob', 20, 'B'),
Student('Charlie', 19, 'B'),
Student('David', 18, 'C')
]
sorted_students = sorted(students, key=lambda s: (s.grade, s.age))
print(sorted_students)
"""
输出:
[
Student(name='Alice', age=18, grade='A'),
Student(name='Charlie', age=19, grade='B'),
Student(name='Bob', age=20, grade='B'),
Student(name='David', age=18, grade='C')
]
"""
在这个示例中,我们为Student类添加了一个新的属性grade,表示学生的成绩等级。我们希望首先按照成绩等级进行排序,如果成绩等级相同,则按照年龄进行排序。通过lambda函数作为key参数,我们可以指定多个属性排序的顺序。
总结:
Python的sorted()函数是一个非常有用的函数,可以对列表进行排序。它接受一个可迭代对象,并返回一个新的排好序的列表,而不会改变原始列表的顺序。我们可以使用reverse参数来指定是否降序排序。可以使用lambda函数作为key参数,对列表中的元素进行自定义排序。
