首页 > 编程知识 正文

Python两个条件排序用法介绍

时间:2023-11-21 11:36:15 阅读:293325 作者:IOJW

本文将从多个方面阐述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提供了丰富的排序方法,我们可以根据不同的需求选用不同的方法进行排序。基础排序、定制排序、倒序排序、自定义比较函数——通过这些方法,我们可以轻松应对各种场景下的排序问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。