python列表排序

2025-04-1609:16:13综合资讯0

Python的排序功能充分展示了其语言简洁而强大的特性。对于List对象,我们可以直接调用sort()方法进行排序,而对于其他可迭代对象,如set和dict,我们则可以使用更为灵活的sorted()函数。

在Python的源码文件builtins.py中,对sort()函数有着明确的定义。

具体来说,sort()函数无需返回值,它拥有两个参数。其中,key参数用于指定排序的依据,而reverse参数则用于确定是否需要以降序方式进行排序,默认为False即升序,设为True则转为降序。

sort()的使用方式相当直接。

例如,若我们希望进行降序排列,可以如此操作:

再如,如果我们想通过key实现降序排序,可以利用匿名函数lambda:

实际上,key参数的功能十分强大。我们可以将其设置为内置函数,或是自定义函数,比如使用绝对值函数。

Python3还为key提供了另一种支持,即通过functools模块的cmp_to_key函数将传统的cmp函数进行转换。这种用法与lambda函数类似,但对于涉及复杂比较逻辑的情况,这种方式更加清晰且便于维护。

相较于只能对列表进行排序的sort()函数,sorted()函数则更为通用。官方文档对其有详尽的解释:

sorted()函数返回的是List类型。其参数列表中,iterable代表可迭代对象;星号表示此后的参数都必须以关键字形式指定;而key与reverse参数的使用方式与sort()完全一致。

以下是sorted()的使用示例:

对于reverse和key的使用,可以参照sort()。当我们需要对集合进行排序时,其操作方式与列表相似:

请注意,此处的排序对象是set,但结果却是一个列表对象(因为set本身并无顺序可言)。若我们需要实现更复杂的排序需求,例如对字典进行排序,可以依据键值进行,最终得到的排序结果将是由键值对组成的列表。

接下来给出一个Leetcode上的题目示例(根据字符出现频率排序):

使用sorted函数来解决这个问题非常直观且易于理解:

这里需要注意的是,d.keys()生成的是一个由键组成的可迭代对象,而之前代码中的Dict.items()则生成了一个由键值对(这是一个Tuple对象)组成的可迭代对象。