Python中的sorted函数:列表排序就这么简单
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函数有更加深入的了解。
