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

Python中的sorted函数:如何对列表按照特定条件进行排序?

发布时间:2023-06-24 17:24:30

Python中的sorted函数是用来对任意可迭代对象进行排序的内置函数。它可以对普通的列表、元组、字典等数据结构进行排序。对于列表来说,sorted函数默认按照元素本身的大小进行排序,也可以通过指定关键字参数key来指定排序的规则。

下面我们将通过实例来介绍如何使用sorted函数对列表按照特定条件进行排序。

1. 按照元素本身大小进行排序

首先我们来看一个最简单的例子,对一个数字列表按照元素本身的大小进行排序:

nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_nums = sorted(nums)
print(sorted_nums)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

可以看到,sorted函数默认按照元素本身的大小进行排序,这也是我们最常见的排序需求。

2. 按照元素的绝对值大小进行排序

如果我们希望按照元素的绝对值大小进行排序,可以通过指定关键字参数key来实现。sorted函数的key参数需要传入一个函数,该函数接收一个元素作为参数,返回一个用于排序的值。在这个函数中,我们可以通过abs函数来获取元素的绝对值:

nums = [-3, 1, -4, 1, 5, -9, 2, -6, 5, 3, 5]
sorted_nums = sorted(nums, key=abs)
print(sorted_nums)  # [1, 1, 2, 3, -3, -4, 5, 5, 5, -6, -9]

可以看到,我们指定了key=abs,表示按照元素绝对值大小进行排序,得到的结果是按照绝对值从小到大排序的列表。

3. 按照元素的长度进行排序

如果列表中的元素是字符串,我们可能会希望按照字符串长度进行排序。这时候,我们可以使用len函数来获取字符串长度:

words = ['apple', 'orange', 'banana', 'pear', 'watermelon', 'grape']
sorted_words = sorted(words, key=len)
print(sorted_words)  # ['pear', 'grape', 'apple', 'orange', 'banana', 'watermelon']

可以看到,我们指定了key=len,表示按照元素长度进行排序,得到的结果是按照长度从小到大排序的列表。

4. 多条件排序

有时候我们需要按照多个条件来排序。比如,对一个学生列表按照分数从高到低排序,如果分数相同,再按照年龄从小到大排序。这时候,我们可以在关键字参数key中传入一个函数,该函数返回一个元祖,每个元素按照不同的条件排序。下面是一个示例:

students = [
    {'name': 'Alice', 'age': 18, 'score': 90},
    {'name': 'Bob', 'age': 19, 'score': 80},
    {'name': 'Charlie', 'age': 20, 'score': 90},
    {'name': 'David', 'age': 21, 'score': 80}
]

sorted_students = sorted(students, key=lambda x: (-x['score'], x['age']))
print(sorted_students)
'''
[
    {'name': 'Alice', 'age': 18, 'score': 90},
    {'name': 'Charlie', 'age': 20, 'score': 90},
    {'name': 'Bob', 'age': 19, 'score': 80},
    {'name': 'David', 'age': 21, 'score': 80}
]
'''

在这个例子中,我们传入了一个lambda函数作为key,该函数返回一个元祖,按照分数从高到低和年龄从小到大排序。在lambda函数中,我们使用了负号来表示分数降序排序,使用正号来表示年龄升序排序。

5. 自定义排序函数

如果以上方法无法满足我们的需求,我们也可以自定义排序函数来实现特定的排序规则。自定义排序函数需要接收一个元素作为参数,返回一个用于排序的值。下面是一个示例:

words = ['apple', 'orange', 'banana', 'pear', 'watermelon', 'grape']

def my_sort(word):
    vowels = ['a', 'e', 'i', 'o', 'u']
    return sum([1 for c in word if c in vowels])  # 统计元音字母个数

sorted_words = sorted(words, key=my_sort)
print(sorted_words)  # ['pear', 'grape', 'apple', 'banana', 'orange', 'watermelon']

在这个例子中,我们定义了一个my_sort函数,统计每个元素的元音字母个数,并返回该值作为排序依据。最后通过sorted函数按照该规则对列表进行排序。

综上所述,sorted函数是一个非常灵活和强大的排序函数,在处理各种排序需求时都能发挥出很好的效果。熟练掌握sorted函数的使用方法,会使我们的Python编程变得更加高效和灵活。