python sort 和sorted区别及解释

从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数。操作对象都是列表

sort 和sorted 区别:

sorted是个内建函数,sort是方法

sort是容器的函数:sort(cmp=None, key=None, reverse=False)

sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False)

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

sorted 是可迭代对象,返回一个新的列表。其中的key可以传入函数,对可迭代对象进行操作。默认reverse=False,reverse=False为升序排序;reverse=True为降序排序

翻译:

以升序返回包含ITerable中所有项的新列表。

可以提供自定义键函数来自定义排序顺序,以及

反向标志可以设置为按降序请求结果。

lambda 和 cmp

如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素),那么可以通过compare(x,y)形式自定义比较函数。
compare(x,y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0(根据你的定义)。定义好该函数之后,就可以提供给sort方法作为参数了。内建函数cmp提供了比较函数的默认实现方式:

>>> cmp(42,32)
1
>>> cmp(99,100)
-1
>>> cmp(10,10)
0
>>> numbers = [5,2,9,7]
>>> numbers.sort(cmp)
>>> numbers
[2,5,7,9]
Sorting  cmp:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L,cmp=lambda x,y:cmp(x[1],y[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

Sorting  keys:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> b=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> sorted(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> b

key的理解 :引入函数,作为对可迭代对象进行操作标准。其中匿名函数中x代表元祖。

>>> student_tuple = [('john', 'A', 15), ('jane', 'B', 12), ('james', 'B', 15)]
>>> sorted(student_tuple, key= lambda x:x[2])
[('jane', 'B', 12), ('john', 'A', 15), ('james', 'B', 15)]
>>> sorted(student_tuple, key= lambda x:x[1])
[('john', 'A', 15), ('jane', 'B', 12), ('james', 'B', 15)]
>>>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值