Python 排序函数

Python中自带了两个排序函数sort和sorted,用法分别为:

sort函数用法

list.sort(cmp=None, key=None, reverse=False)

特点:对list原地排序(直接改变数组),无返回值。

参数:

  • cmp——可选参数, 可用于自定义排序规则。
  • key ——主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse——升序or降序,reverse = True 降序, reverse = False 升序(默认)。

sorted函数用法

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

特点:可以对所有可迭代的对象进行排序操作。返回的是一个新的 list,不修改原来的对象。

参数:

  • iterable – 可迭代对象。
  • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

自定义排序规则

这里以sorted函数为例,自定义排序规则。

比如给定区间数组s = [[1,6],[2,3],[1,4],[3,5]],数组中的每个元素代表一个区间范围,希望的排序规则:根据区间起始点的大小进行排序,起始点小的排在前面,起始点如果相同,则终止点小的排在前面。

  1. 自定义compare函数,compare函数需要传两个参数a和b(a和b每次都是从可迭代对象里面取的,这个咱们不管),这个compare函数需要有三个返回值{-1, 0, 1},当a<b时,返回值为-1,a=b时,返回值为0,a>b时,返回值为1.

  2. python3中的sorted()函数去除了cmp参数,推荐使用key。functools.cmp_to_key() 将 compare函数 转化为 key。

import functools
def compare(a, b):
    if a[0] != b[0]:
        return -1 if a[0] < b[0] else 1
    else:
        if a[1] < b[1]:
            return -1
        elif a[1] > b[1]:
            return 1
        else:
            return 0

s = [[1,6],[2,3],[1,4],[3,5]]
s = sorted(s, key=functools.cmp_to_key(compare))
print(s)  # [[1, 4], [1, 6], [2, 3], [3, 5]]

#使用sort函数也是一样的用法
# s.sort(key=functools.cmp_to_key(compare))
# print(s)  # [[1, 4], [1, 6], [2, 3], [3, 5]]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值