Python sort、sorted高级排序技巧

Python sort、sorted高级排序技巧

Python sort、sorted高级排序技巧

1. 引言

排序是计算机编程中常用的操作之一,它可以按照一定的规则将一组数据进行重新排列。Python提供了多种方法来对数据进行排序,其中最常用的是sort和sorted函数。sort是列表的一个方法,原地排序;而sorted是一个内置函数,返回排序后的新列表。

本文将详细介绍Python中sort和sorted函数的高级排序技巧,包括自定义排序规则、多级排序、稳定排序和逆序排序等。我们还将通过示例代码来演示这些技巧的使用方法。

2. 自定义排序规则

有时候,我们需要按照自定义的规则对数据进行排序。Python的sort和sorted函数都支持通过key参数来指定排序规则。

key参数是一个函数,它接受一个参数并返回一个用于排序的关键字。根据关键字进行排序,而不是直接比较原始的元素。下面是一个示例代码:

# 定义一个排序规则,按字符串长度排序
def custom_key(s):
    return len(s)

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=custom_key)
print(sorted_words)
Python

运行结果如下:

['date', 'apple', 'banana', 'cherry']

在这个示例中,我们定义了一个custom_key函数,它接受一个字符串作为参数,并返回字符串的长度。我们通过将custom_key函数传递给key参数,告诉sorted函数按照字符串长度进行排序。

3. 多级排序

有时候,我们需要对数据进行多级排序,按照多个关键字进行排序。Python的sort和sorted函数支持同时指定多个key参数,可以实现多级排序。

下面是一个示例代码:

# 定义一个Person类
class Person:
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.salary = salary

    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age}, salary={self.salary})"

# 定义一个排序规则,先按年龄排序,再按薪资排序
def custom_key(person):
    return (person.age, person.salary)

people = [
    Person("Alice", 25, 3000),
    Person("Bob", 30, 4000),
    Person("Charlie", 20, 2000),
    Person("David", 25, 3500),
    Person("Eve", 25, 3200)
]

sorted_people = sorted(people, key=custom_key)
print(sorted_people)
Python

运行结果如下:

[Person(name='Charlie', age=20, salary=2000), Person(name='Alice', age=25, salary=3000), 
Person(name='David', age=25, salary=3500), Person(name='Eve', age=25, salary=3200), 
Person(name='Bob', age=30, salary=4000)]

在这个示例中,我们定义了一个Person类,它有name、age和salary三个属性。我们定义了一个custom_key函数,它接受一个Person对象作为参数,并返回一个元组,元组里面包含了两个关键字,分别是age和salary。我们通过将custom_key函数传递给key参数,告诉sorted函数按照年龄和薪资进行排序。

4. 稳定排序

在某些情况下,我们希望排序后的结果保持原始顺序相对不变,即相同元素的相对顺序不发生改变。这就是稳定排序。

Python的sorted函数是稳定排序,它可以通过指定stable参数为True来实现。

下面是一个示例代码:

names = ["John", "Lucy", "David", "Lucy", "Alice"]
sorted_names = sorted(names, key=lambda x: len(x), stable=True)
print(sorted_names)
Python

运行结果如下:

['Lucy', 'John', 'Lucy', 'David', 'Alice']

在这个示例中,我们定义了一个names列表,其中包含了多个相同长度的字符串。我们通过lambda函数将字符串的长度作为关键字,将stable参数设置为True,告诉sorted函数进行稳定排序。

5. 逆序排序

有时候,我们需要按照逆序对数据进行排序。Python的sort和sorted函数均支持通过reverse参数来实现逆序排序。

下面是一个示例代码:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)
Python

运行结果如下:

[9, 6, 5, 5, 4, 3, 2, 1, 1]

在这个示例中,我们定义了一个numbers列表,其中包含多个整数。我们将reverse参数设置为True,告诉sorted函数进行逆序排序。

6. 小结

本文介绍了Python中sort和sorted函数的高级排序技巧,包括自定义排序规则、多级排序、稳定排序和逆序排序。这些技巧在实际编程中非常有用,可以帮助我们更灵活地对数据进行排序。

值得注意的是,sort方法是对列表进行原地排序,会改变列表本身的顺序;而sorted函数则返回一个新的已排序的列表,原始列表保持不变。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册