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

Python中的sorted函数:列表排序就这么简单

发布时间:2023-06-21 18:00:48

Python中的sorted函数是一个非常实用的函数,可以用来对列表、元组、字典等多种变量进行排序。本文将深入介绍Python中的sorted函数,包括如何使用sorted函数、sorted函数的参数、sorted函数的原理等。

1.基本用法

在Python中,sorted函数可以对一个列表进行排序,并返回一个新的已排序的列表。下面是一个例子:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> b = sorted(a)
>>> print(b)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

上面的代码中,首先定义了一个列表a,然后使用sorted函数对a进行排序,并将排序后的结果赋值给列表b。最后,输出列表b的内容。

也可以将一个元组或一个字典转换为列表后进行排序。例如:

>>> a = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
>>> b = sorted(list(a))
>>> print(b)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
>>> a = {'a': 1, 'b': 3, 'c': 2}
>>> b = sorted(list(a.keys()), key=lambda x: a[x])
>>> print(b)
['a', 'c', 'b']

上面的代码中, 个例子中,元组a被转换为了列表后进行排序。第二个例子中,根据字典a中的值进行排序(默认是按键值),并返回排序后的键列表。

2. 参数

sorted函数有两个位置参数,一个关键字参数和两个可选参数:

sorted(iterable, *, key=None, reverse=False)

- iterable:要排序的可迭代对象,如列表、元组、字典等

- key:用来排序的函数,key可以是一个函数或lambda表达式。如果指定key,则根据key函数的返回值进行排序。例如,要对一个列表按照字符串长度进行排序,可以这样写:sorted(a, key=lambda x: len(x))

- reverse:是否降序排列,如果reverse为True,则按照降序排列,否则按照升序排列。默认值为False。

以下是一些使用示例:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> b = sorted(a, reverse=True)
>>> print(b)
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
>>> a = ['apple', 'orange', 'pear', 'banana']
>>> b = sorted(a, key=lambda x: len(x))
>>> print(b)
['pear', 'apple', 'banana', 'orange']

上面的 个例子中,使用sorted函数对列表a进行降序排列,结果b是[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]。第二个例子中,使用sorted函数对字符串列表a按照字符串长度排序,最终结果是['pear', 'apple', 'banana', 'orange']。

3. 原理

Python中的sorted函数是一个十分高效的排序算法,它基于“归并排序”算法,该算法的时间复杂度为O(nlogn)。归并排序算法将大问题划分为若干个小问题,递归到最小的问题时,进行排序,然后再将小问题有序合并成大问题的有序解决方案。

归并排序是一个“分而治之”,“分治”的算法。它只需要两个基本操作:

- 分:将序列平分为两半

- 治:将两个有序子序列合并成单个有序序列

Python的sorted函数每次将序列平分为两半,然后递归地继续排序,最终将两个有序子序列合并成单个有序序列。这种现象就像是在书桌上整理纸张,将一堆文档分成两半,将文件夹分类,最后将文件夹合并在一起。归并排序是一种高效、占用空间小的排序算法。

4. 注意事项

使用sorted函数时,需要注意以下几点:

- 不同类型的数据类型不能混合排序,会报错,例如使用sorted函数对int型和str型的列表排序。

- 在使用key指定排序规则时,需注意lambda函数的使用方法,具体可见上面的示例。

- reverse参数应该设置成True或False,而不是任意的值,否则会报错。

- sorted函数处理的列表,不能被其他的操作修改,例如该列表被删除、赋值、修改等,则可能导致结果与预期不符。

总结

Python的sorted函数是一个实用的函数,可以对列表、元组、字典等类型的数据进行排序。在使用时,需要注意参数的设置,以及数据类型是否匹配等问题。归并排序是一种高效、占用空间小的排序算法,是Python中实现sorted函数的核心算法。通过学习本文,希望能够对sorted函数有更加深入的了解。