python知识点,列表排序sort()和sorted()的区别?

sort()是列表类型的方法,只适用于列表;sorted()是内置函数,支持各种容器类型。它们都可以排序,且用法类似,但sort()是在原地排序的,不会返回排序后的列表,而sorted()是返回新的排序列表。

1 >>> help(list.sort)
2 Help on method_descriptor:
3
4 sort(...)
5     L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
6 
7
8 >>> help(sorted)
9 Help on built-in function sorted in module builtins:
10
11 sorted(iterable, /, *, key=None, reverse=False)
12     Return a new list containing all items from the iterable in ascending order.
13
14     A custom key function can be supplied to customize the sort order, and the
15     reverse flag can be set to request the result in descending order.

我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取

本文仅简单介绍排序用法。

例如列表L:

>>> L = ['python', 'shell', 'Perl', 'Go', 'PHP']

使用sort()和sorted()排序L,注意sort()是对L直接原地排序的,不是通过返回值来体现排序结果的,所以无需赋值给变量。而sorted()则是返回排序后的新结果,需要赋值给变量才能保存排序结果。

1 >>> sorted(L)
2 ['Go', 'PHP', 'Perl', 'python', 'shell']
3 >>> L
4 ['python', 'shell', 'Perl', 'Go', 'PHP']
5 
6 
7 >>> L.sort()
8 >>> L
9 ['Go', 'PHP', 'Perl', 'python', 'shell']

不难发现,sort()和sorted()默认都是升序排序的(A<B<...<Z<a<b<...<z)。它们都可以指定参数reverse=True来表示顺序反转,也就是默认得到降序:

1 >>> L.sort(reverse=True)
2 >>> L
3 ['shell', 'python', 'Perl', 'PHP', 'Go']

在python 3.x中,sort()和sorted()不允许对包含不同数据类型的列表进行排序。也就是说,如果列表中既有数值,又有字符串,则排序操作报错。

sort()和sorted()的另一个参数是key,它默认为key=None,该参数用来指定自定义的排序函数,从而实现自己需要的排序规则。

例如,上面的列表不再按照默认的字符顺序排序,而是想要按照字符串的长度进行排序。所以,自定义这个排序函数:

1 >>> def sortByLen(s):
2 ...     return len(s)

然后通过指定key = sortByLen的参数方式调用sort()或sorted(),在此期间还可以指定reverse = True

1 >>> L = ['shell', 'python', 'Perl', 'PHP', 'Go']
2 
3 >>> sorted(L,key=sortByLen)
4 ['Go', 'PHP', 'Perl', 'shell', 'python']
5
6 >>> L.sort(key=sortByLen,reverse=True)
7 >>> L
8 ['python', 'shell', 'Perl', 'PHP', 'Go']

再例如,按照列表每个元素的第二个字符来排序。

1 def f(e):
2     return e[1]
3 
4 L = ['shell', 'python', 'Perl', 'PHP', 'Go']
5
6 sorted(L, key=f)
7 L.sort(key=f)

更多的排序方式,比如指定两个排序依据,一个按字符串长度升序排,长度相同的按第2个字符降序排。用法其实很简单,不过稍占篇幅,所以本文不解释了。

觉得文章还可以的话不妨点个赞,有任何意见或者看法欢迎大家评论!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值