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

使用Python的sorted函数--对列表进行排序

发布时间:2023-06-13 12:39:04

Python是一种高级语言,它具有简单易学、易于阅读、易于编写、易于维护和高效的特点,是现今Web开发与数据科学趋势中不可或缺的语言。Python提供了丰富的内置函数,其中sorted()函数是其中之一,它可以非常方便地完成对列表的排序操作。此文将介绍如何使用Python的sorted()函数对列表进行排序。

sorted()函数的基本用法

使用Python内置的sorted()函数可以轻松地对列表进行排序,而不用编写自己的排序算法。sorted()函数返回排好序的新列表,而不修改原始列表。以下是sorted()函数的基本用法:

sorted(iterable[, key][, reverse])

其中,iterable 是要排序的列表,key 是可选的关键字(函数),用于从每个列表元素中提取一个比较关键字,reverse 是可选的排序规则,可以是True或False。当reverse为True时,列表是逆序排列的。

以下是一个使用sorted()函数对列表进行升序排序的示例:

list1 = [5, 1, 3, 9, 2]

sorted_list1 = sorted(list1)

print(sorted_list1)

输出结果为:

[1, 2, 3, 5, 9]

将reverse参数设为True可以将列表降序排列:

list2 = [5, 1, 3, 9, 2]

sorted_list2 = sorted(list2, reverse=True)

print(sorted_list2)

输出结果为:

[9, 5, 3, 2, 1]

如果列表中的元素是字符串,可以使用key参数按照字符串的长度进行排序:

list3 = ['python', 'java', 'c', 'ruby', 'perl', 'javascript']

sorted_list3 = sorted(list3, key=len)

print(sorted_list3)

输出结果为:

['c', 'perl', 'java', 'ruby', 'python', 'javascript']

使用sorted()函数排序复杂类型的数据

在Python中,可以使用sorted()函数来排序各种类型的数据,甚至是复杂的类型,例如元组、字典和自定义对象等。

1. 对元组进行排序

元组是不可变序列,可以在列表中包含多个元组。可以使用sorted()函数对这些元组进行排序。例如,假设我们有以下元组列表:

tups = [(1, 4), (2, 3), (3, 2), (4, 1)]

我们可以按照第二个元素对元组进行排序:

sorted_tups = sorted(tups, key=lambda x: x[1])

print(sorted_tups)

输出结果为:

[(4, 1), (3, 2), (2, 3), (1, 4)]

这里的key参数是lambda函数,用于从每个元组中提取第二个元素。因为Lambda函数是匿名函数,通过使用此函数,我们可以轻松地从元组中提取一个单独的元素来用于排序。

2. 对字典进行排序

字典是无序的键值对,不适合排序,但可以对其键或值进行排序。我们可以使用 sorted()函数对字典进行排序!

例如,假设我们有以下字典:

dict1 = {'python': 3, 'java': 2, 'c': 1, 'ruby': 4}

字典不能直接排序本身,但是可以根据键或值的顺序对其进行排序。

根据键进行排序:

sorted_dict1 = sorted(dict1.items())

print(sorted_dict1)

输出结果为:

[('c', 1), ('java', 2), ('python', 3), ('ruby', 4)]

这里,我们使用了items()方法将字典中的所有键值对作为元组列表,然后将其传递给sorted()函数以按键排序。

根据值进行排序:

sorted_dict2 = sorted(dict1.items(), key=lambda x: x[1])

print(sorted_dict2)

输出结果为:

[('c', 1), ('java', 2), ('python', 3), ('ruby', 4)]

这里的key参数是lambda函数,用于从每个元组中提取值。我们将其称为字典中的值访问器,因为它允许我们根据字典中的值对字典进行排序。和元组排序有些类似。

3. 对自定义对象进行排序

除了普通类型外,还可以使用sorted()函数对自定义对象进行排序。例如,我们可以使用以下自定义对象:

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age

people = [Person('Alice', 25), Person('Bob', 20), Person('Charlie', 30), Person('David', 10)]

我们可以对people列表中的Person对象按照年龄进行排序:

sorted_people = sorted(people, key=lambda x: x.age)

for person in sorted_people:

    print(person.name, person.age)

输出结果为:

David 10

Bob 20

Alice 25

Charlie 30

因为Person对象没有固有的排序方式,需要使用key参数来指定排序方式。在此示例中,我们使用了一个lambda函数,它从每个Person对象中提取年龄属性,以便按此属性对列表进行排序。

总结

Python中的sorted()函数是一个非常强大的工具,可以方便地对列表、元组、字典和自定义对象等不同类型的数据进行排序。使用sorted()函数可以节省时间和精力,并且可以在代码中节约任何开发人员的时间。熟练掌握sorted()函数能够帮助我们高效解决真实世界中的问题,更好的适应未来的Python开发!