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

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

发布时间:2023-06-15 14:32:33

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函数在很多场景下都能够提供非常方便的功能,对列表进行排序操作更加便捷。