Python函数之sorted()函数的使用方法及示例
Python是一种优秀的编程语言,因为它拥有很多强大的函数和工具,使得编写复杂的代码变得更加容易。其中,sorted()函数就是这些工具之一,它可以非常方便地对列表、元组、字典等数据类型进行排序操作。下面就来详细介绍一下sorted()函数的使用方法及示例。
一、sorted()函数的基本用法
sorted()函数的语法如下:
sorted(iterable, key=None, reverse=False)
其中,iterable表示要排序的数据类型,可以是列表、元组、字典等可迭代对象;key是排序的依据,可以是一个函数或lambda表达式;reverse表示是否按照倒序进行排序,可以为True或False,默认为False。下面分别介绍一下这些参数的含义。
1. iterable:要排序的数据类型
iterable可以是各种可迭代对象,例如列表、元组、字典等。在进行排序时,sorted()函数会将这些可迭代对象中的所有元素作为一个整体进行排序。
下面给出一个简单的示例:
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(sorted(lst))
输出结果为:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
可以看到,sorted()函数对列表lst中的所有元素进行了排序。
2. key:排序的依据
key参数可以传入一个函数或lambda表达式,表示按照特定的规则对可迭代对象中的元素进行排序。默认情况下,sorted()函数会按照元素的大小进行排序。
下面给出一个示例:
lst = ["apple", "banana", "orange", "watermelon", "peach"]
print(sorted(lst, key=len))
输出结果为:
['apple', 'peach', 'banana', 'orange', 'watermelon']
可以看到,sorted()函数在对lst进行排序时,选择了长度作为排序的依据。因此,长度较短的单词排在了前面。
下面再给出一个示例:
lst = ["ab", "cd", "ef", "gh"]
print(sorted(lst, key=lambda x: -ord(x[0])))
输出结果为:
['gh', 'ef', 'cd', 'ab']
在这个示例中,我们通过key参数传入了一个lambda表达式,它表示按照字符串的首字符的ASCII码的相反数进行排序。因此,首字符的ASCII码越大的单词排在了前面。
3. reverse:排序的方向
reverse参数表示按照升序还是降序进行排序,可以为True或False,默认为False。如果设为True,则表示按照倒序进行排序;如果设为False,则表示按照升序进行排序。
下面给出一个示例:
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(sorted(lst, reverse=True))
输出结果为:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
可以看到,sorted()函数对lst进行了倒序排序。
二、sorted()函数的进阶用法
1. 对字典进行排序
上述的用法中,我们只是针对了列表或元组等可迭代对象进行了排序。但是,sorted()函数同样可以用来对字典进行排序。对字典进行排序的关键在于,我们需要先把字典中的键-值对转换成元组,然后再对元组进行排序。
下面给出一个示例:
dct = {"apple": 4, "orange": 2, "banana": 3, "watermelon": 1}
print(sorted(dct.items(), key=lambda x: x[1]))
输出结果为:
[('watermelon', 1), ('orange', 2), ('banana', 3), ('apple', 4)]
在这个示例中,我们首先调用dct.items()方法,将字典中的键-值对转换成元组的形式。然后,我们通过key参数传入了一个lambda表达式,它表示按照元组中的第二个元素(也就是值)进行排序。因此,值越小的键排在了前面。
2. 对类对象进行排序
在Python中,我们可以通过__lt__()方法来为一个类对象定义小于运算符(<)。同样的,我们也可以在类中定义__gt__()方法来定义大于运算符(>)。
下面给出一个示例:
class Studnet:
def __init__(self, name, score):
self.name = name
self.score = score
def __str__(self):
return "Name: {}, Score: {}".format(self.name, self.score)
def __lt__(self, other):
return self.score < other.score
students = [
Studnet("Tom", 80),
Studnet("Jerry", 90),
Studnet("Mickey", 70),
Studnet("Donald", 85),
Studnet("Minnie", 95)
]
print(sorted(students))
输出结果为:
[Name: Mickey, Score: 70, Name: Tom, Score: 80, Name: Donald, Score: 85, Name: Jerry, Score: 90, Name: Minnie, Score: 95]
在这个示例中,我们定义了一个Studnet类。在该类中,我们重载了__lt__()方法,使得Studnet对象之间可以进行大小比较。然后,我们定义了一个包含Studnet对象的列表students,并通过sorted()函数对它进行了排序。由于Studnet类已经定义了小于运算符,因此我们不需要再传入key参数。
三、总结
sorted()函数是Python中非常有用的一个函数,可以用来对列表、元组、字典等数据类型进行排序操作。它的基本用法非常简单,只需要传入一个可迭代对象即可。如果需要进行进阶操作,我们还可以传入key参数或定义类对象的小于运算符来实现。了解sorted()函数的使用方法对于Python程序员来说非常重要,希望本文对大家有所帮助。
