如何使用Python中的sorted函数按特定条件对列表进行排序?
Python 中的 sorted函数 是非常强大和灵活的工具,可以对列表中的元素按照各种条件进行排序。本文将介绍如何使用 sorted 函数按特定条件对列表进行排序,包括:
1. 对数值列表按数值大小排序
2. 对字符串列表按字典序排序
3. 对自定义对象列表按特定属性排序
4. 对多维列表按多个条件排序
1. 对数值列表按数值大小排序
对数值列表按照数值大小排序,可以直接使用 sorted 函数,不需要任何参数。默认情况下, sorted 函数对列表进行升序排序。
例如,对于下面的列表:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
我们可以使用 sorted 函数进行排序:
sorted_numbers = sorted(numbers) print(sorted_numbers)
输出结果为:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
如果要进行降序排序,可以使用 reverse=True 参数:
sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers)
输出结果为:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
2. 对字符串列表按字典序排序
对于字符串列表,按照字典序排序可以使用 sorted 函数。默认情况下, sorted 函数会按照每个字符串的首字母在字典中的顺序进行排序。
例如,对于下面的列表:
words = ['apple', 'banana', 'cherry', 'date', 'grape']
我们可以使用 sorted 函数进行排序:
sorted_words = sorted(words) print(sorted_words)
输出结果为:
['apple', 'banana', 'cherry', 'date', 'grape']
如果要进行反序排序,可以使用 reverse=True 参数:
sorted_words = sorted(words, reverse=True) print(sorted_words)
输出结果为:
['grape', 'date', 'cherry', 'banana', 'apple']
3. 对自定义对象列表按特定属性排序
对于自定义对象,我们可以使用 key 参数来指定排序的属性。 key 参数是一个函数,接收一个元素作为参数,并返回一个可排序的值。
例如,对于下面的自定义对象列表:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"{self.name} ({self.age})"
people = [Person('Alice', 25),
Person('Bob', 30),
Person('Charlie', 20)]
我们可以使用 sorted 函数按名字排序:
sorted_people = sorted(people, key=lambda person: person.name) print(sorted_people)
输出结果为:
[Alice (25), Bob (30), Charlie (20)]
也可以按照年龄排序:
sorted_people = sorted(people, key=lambda person: person.age) print(sorted_people)
输出结果为:
[Charlie (20), Alice (25), Bob (30)]
对于多个属性排序,可以将多个属性组成一个元组来排序,例如按照年龄排序后再按照名字排序:
sorted_people = sorted(people, key=lambda person: (person.age, person.name)) print(sorted_people)
输出结果为:
[Charlie (20), Alice (25), Bob (30)]
4. 对多维列表按多个条件排序
对于多维列表,我们可以使用多个 key 参数进行排序。例如,对于下面的多维列表:
records = [('Alice', 25, 170),
('Bob', 30, 180),
('Charlie', 20, 165),
('David', 25, 175),
('Eva', 30, 170)]
我们可以使用 sorted 函数按年龄和身高排序:
sorted_records = sorted(records, key=lambda x: (x[1], x[2])) print(sorted_records)
输出结果为:
[('Charlie', 20, 165), ('Alice', 25, 170), ('David', 25, 175), ('Eva', 30, 170), ('Bob', 30, 180)]
这里的 key 参数使用了一个 lambda 匿名函数,该函数返回元组 (x[1], x[2]) 作为排序依据。这里 x 表示 records 列表中的一条记录,x[1] 表示年龄,x[2] 表示身高。这样,根据年龄升序排列,如果年龄相同,则根据身高升序排列。
总结
本文介绍了如何使用 Python 中的 sorted 函数按特定条件对列表进行排序。其中,对于数值列表和字符串列表,可以直接使用 sorted 函数进行排序;对于自定义对象列表,可以使用 key 参数来指定排序依据;对于多维列表,可以使用多个 key 参数进行排序。sorted函数在很多场景下都能够提供非常方便的功能,对列表进行排序操作更加便捷。
