本文将从多个方面阐述Python中对两个条件进行排序的方法和技巧。
一、基础排序
基础排序是Python中最常用、最基本的排序方式。首先,我们需要了解Python中的sort()方法和sorted()方法的基本用法:
# sort()方法 list1 = [3, 1, 4, 2, 5] list1.sort() print(list1) # 输出[1, 2, 3, 4, 5] # sorted()方法 list2 = [3, 1, 4, 2, 5] sorted_list = sorted(list2) print(sorted_list) # 输出[1, 2, 3, 4, 5]
以上代码中,sort()方法是对原列表进行排序,没有返回值;sorted()方法是对原列表的一个副本进行排序,返回一个新的有序列表。
在基础排序的基础上,如果需要对列表进行多个条件的排序,可以使用sorted()方法的key参数:
students = [ {'name': 'Tom', 'score': 90, 'age': 18}, {'name': 'Jerry', 'score': 80, 'age': 19}, {'name': 'Mike', 'score': 90, 'age': 17}, {'name': 'Kate', 'score': 70, 'age': 18} ] sorted_students = sorted(students, key=lambda x: (x['score'], x['age'])) print(sorted_students) # 输出: # [{'name': 'Kate', 'score': 70, 'age': 18}, # {'name': 'Jerry', 'score': 80, 'age': 19}, # {'name': 'Mike', 'score': 90, 'age': 17}, # {'name': 'Tom', 'score': 90, 'age': 18}]
以上代码中,我们按照成绩升序排列(因为score是列表中的第一个关键字),成绩相同时按照年龄升序排列(因为age是列表中的第二个关键字)。
二、定制排序
如果我们需要对一个自定义的类进行排序,Python的内置排序无法满足我们的需求。这时,我们可以通过实现类的__lt__()方法(小于运算符<的重载函数),来定制自己的排序规则。例如:
class Student: def __init__(self, name, score, age): self.name = name self.score = score self.age = age def __lt__(self, other): if self.score == other.score: return self.age < other.age return self.score < other.score students = [ Student('Tom', 90, 18), Student('Jerry', 80, 19), Student('Mike', 90, 17), Student('Kate', 70, 18) ] sorted_students = sorted(students) for student in sorted_students: print(student.name, student.score, student.age) # 输出: # Kate 70 18 # Jerry 80 19 # Mike 90 17 # Tom 90 18
通过实现__lt__()方法,我们可以在排序时自定义排序规则。
三、倒序排序
默认情况下,Python中的sort()方法和sorted()方法都是升序排序。如果需要进行倒序排序,可以使用reverse参数,将其设置为True:
list1 = [3, 1, 4, 2, 5] list1.sort(reverse=True) print(list1) # 输出[5, 4, 3, 2, 1] list2 = [3, 1, 4, 2, 5] sorted_list = sorted(list2, reverse=True) print(sorted_list) # 输出[5, 4, 3, 2, 1]
以上代码中,reverse=True表示按照降序进行排序。
四、自定义比较函数
除了上述方法外,Python还提供了一个自定义比较函数的方法——cmp_to_key()。通过cmp_to_key()方法可以把一个比较函数转换为一个key函数,从而可以使用sorted()方法进行自定义排序。例如:
from functools import cmp_to_key def compare(x, y): if x['score'] == y['score']: return x['age'] - y['age'] return x['score'] - y['score'] students = [ {'name': 'Tom', 'score': 90, 'age': 18}, {'name': 'Jerry', 'score': 80, 'age': 19}, {'name': 'Mike', 'score': 90, 'age': 17}, {'name': 'Kate', 'score': 70, 'age': 18} ] sorted_students = sorted(students, key=cmp_to_key(compare)) print(sorted_students) # 输出: # [{'name': 'Kate', 'score': 70, 'age': 18}, # {'name': 'Jerry', 'score': 80, 'age': 19}, # {'name': 'Mike', 'score': 90, 'age': 17}, # {'name': 'Tom', 'score': 90, 'age': 18}]
以上代码中,我们通过编写一个比较函数compare(),并将其通过cmp_to_key()转换为一个key函数,实现了对多个条件进行排序的目的。
总结
Python提供了丰富的排序方法,我们可以根据不同的需求选用不同的方法进行排序。基础排序、定制排序、倒序排序、自定义比较函数——通过这些方法,我们可以轻松应对各种场景下的排序问题。