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

如何使用Python的sorted()函数对列表进行升/降排序?

发布时间:2023-10-14 02:03:40

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参数,对列表中的元素进行自定义排序。