Python sort() 和 sorted() 的区别应用实例详解

    大家好,今天针对 Python 中 sort() 和 sorted() 之间的区别,来一个实例详细解读。sort — 顾名思义就是排序的意思,它可以接收的对象为可迭代的数据类型。今天以列表为例子演示两者的不同点、相同点,以及其中一些常用的高级参数使用方法。



    sort(),它是不可以储存变量值的 : 例如有一个列表为 day_lst = [‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’], 当创建一个新的变量名为 new_lst 去执行 day_lst.sort(),然后打印这个变量值,结果为 “None” , 这正验证了 sort() 方法是不可以储存变量值的,因此返回的是空值。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

new_lst = day_lst.sort()

print(new_lst)


    对 day_lst sort() 排序后,结果为升序 (ascending)



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

day_lst.sort()

print(day_lst)


    sorted(),它是可以储存变量值的 : 同样 列表为 day_lst = [‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’] ,当创建一个新的变量名为 new_lst 去执行 sorted(day_lst),然后打印这个变量值, 结果为一个已经按升序排序的新列表。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

new_lst = sorted(day_lst)

print(new_lst)


    以上两种方法,默认的排序方式都是升序 — ascending,那么如果要变成降序 — descending,该怎样实现呢? 只需要加上参数 reverse = True 就可以了。先看看两种方法实现的结果。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

day_lst.sort(reverse=True)

print(day_lst)



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

new_lst = sorted(day_lst,reverse=True)

print(new_lst)


    以上可见,当加上参数 reverse = True, 结果完全是倒转了。那就说明了 reverse 这个可选 (optional ) 参数,默认为 False。 我们可以再看看以下图就知道为什么它是可选的参数,又或者说为什么知道有这个参数的存在可选?



在这里插入图片描述



在这里插入图片描述



    根据以上2个图所显示,无论是 sort() 还是 sorted() , 当写入他们的方法后,编译器都会提示显示有相关的可选参数,以及一些自带的可选参数默认的值。而 reverse 就是一个关键字参数,值为 bool 类型,那就是 True 和 False



    但可能你们会问,方法带出来的提示并没有显示究竟默认的方式是升序还是降序,那怎样判断呢? 我们可以通过查看相对应的底层代码(源码)看看,这也是作为程序员必须掌握的查看方法,因为每个方法里面,包含好多不同的实现方法、参数用法的解释说明等等。



    键盘按着 “Ctrl” 键,然后鼠标移动到相对应的方法,等待方法变成带超链接的状态就可以鼠标点击它,这样就可以进入它的底层代码看相对应的实现规则、逻辑。



    "Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order. "



    图里的这段话大概意思就是,sorted() 方法返回一个升序的可迭代的数据类型。其中它包含2个参数,一个就是 key,可以自定义; 另外一个就是 reverse,它可以设置为降序的方式。



在这里插入图片描述



    最后演示一下参数 key 的具体用法,由于 sort() 和 sorted() 这两个方法都支持 key参数,所以只演示 sort(),不再重复 sorted() 这部分了。例如有 num_lst = [50,100,-60,20,40] 这样一个列表。



    在传入 key=abs 这个参数后,可见输出的排序结果为 [20, 40, 50, -60, 100], 按照默认升序逻辑,-60 不是最小吗?为什么它排在第4位,而不是第1位呢? 这样要注意的是因为 key 的值为 abs, abs 意思就是绝对值的意思,因此 -60的绝对值就是60,所以编译器就按 -60转为绝对值 60去排序。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

num_lst = [50,100,-60,20,40]

num_lst.sort(key=abs)

print(num_lst)


    例如有一个 letter_lst = [‘E’, ‘G’, ‘X’, ‘b’, ‘f’, ‘y’] 的列表, 在传入key=str.lower 后, 它的作用就是先把列表里的字母的大写字母转换成小写,就相当于首先变成 [‘e’, ‘g’, ‘x’, ‘b’, ‘f’, ‘y’] , 要注意的是, 字符串类型的排序按照ASCII的大小进行比较。根据以下截取的底层代码解释,If a key function is given, apply it once to each list item and sort them,ascending or descending, according to their function values. 意思就是排序的结果是根据它们的值而定。相关的字母 ASCII 对照表,可以看我文章最后的对照图。



在这里插入图片描述



    因此在转变成全小写列表 [‘e’, ‘g’, ‘x’, ‘b’, ‘f’, ‘y’] 后, 根据它们对应的 ASCII的值,就相当于 [101, 103, 120, 98, 102, 121] 这样的列表, 然后再按升序排序方式,相当于 [98,101,102,103,120, 121 ] , 因此最后输出的结果为 [‘b’, ‘E’, ‘f’, ‘G’, ‘X’, ‘y’] , 因为 98 对应为 b, 101 对应为 e, 102 对应为 f, 103 对应为 g, 120 对应为 x , 121 对应为 y



在这里插入图片描述





letter_lst = ['E', 'G', 'X', 'b', 'f', 'y']

# num_lst.sort(key=abs)

letter_lst.sort(key=str.lower)

print(letter_lst)


在这里插入图片描述



    关于这两个方法的主要常用方法就介绍到这里了, 如果有任何问题,欢迎评论区留言问,有空的时候会尽快回复!

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值