python的sort()方法详解

>>> l1=[4,2,3,2,3,3,4,4,1,4]
>>> help(l1.sort)
Help on built-in function sort:

sort(*, key=None, reverse=False) method of builtins.list instance
    Sort the list in ascending order and return None.
    
    The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
    order of two equal elements is maintained).
    
    If a key function is given, apply it once to each list item and sort them,
    ascending or descending, according to their function values.
    
    The reverse flag can be set to sort in descending order.

Google翻译

内置函数 sort 的帮助:

内置数据结构list 实例的 sort(*, key=None, reverse=False) 方法
     按升序对列表进行排序并返回 None。
    
     排序是就地的(即列表本身被修改)和稳定的(即保持两个相等元素的顺序)。
    
     如果给出了key函数,则将其应用于每个列表项并根据它们的函数值对它们进行升序或降序排序。
    
     可以将反向标志设置为按降序排序。

 

>>> l1=[4,2,3,2,3,3,4,4,1,4]#数据准备

>>> l1.sort()#默认情况下,即reverse=True,按照升序排列
>>> l1
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> l1.sort(reverse=False)
>>> l1
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> l1.sort(reverse=True)#令reverse=True,按照降序排列
>>> l1
[4, 4, 4, 4, 3, 3, 3, 2, 2, 1]

#将函数赋给key,然后将l1里的元素一一带入到key函数中,再根据key的返回值对l1里的元素进行排序
#函数准备
>>> def distance(x):
	'''函数的返回值是输入x与3的距离'''
	return abs(3-x)

>>> l1.sort(key=distance)
>>> l1
[3, 3, 3, 4, 4, 4, 4, 2, 2, 1]

>>> l1.sort(key=distance,reverse=True)
>>> l1
[1, 4, 4, 4, 4, 2, 2, 3, 3, 3]

下面这个例子完美的体现key的应用

#函数准备
>>> def pick(x):
	return x[1]

>>> pairs = [(4, 'four'),(1, 'one'),  (3, 'three'), (2, 'two')]
>>> pairs.sort()s#默认先按照元素的第一个由小到大排列
>>> pair
[(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]

#那我们如何根据元素的第二个元素进行排列呢?接下来就是体现key作用的时候到了
>>> pairs.sort(key=pick)
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

最后介绍一个小技巧:lambda关键字的应用,sort配合lambda使用,能充分发挥key的优势。

lambda只有一个功能,就是创建一个“简单”的无名函数,简单到只有输入和返回。其一般形式:

lambda 输入:返回

对应的def形式是

def 无函数名(输入):

   return 返回

就拿上面pick函数的例子来说,使用lambda表达式,只需一行代码就可以轻松实现排序

>>>pairs.sort(key=lambda x: x[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值