python排序函数sort()、sorted()、argsort()

1.sort()

sort()是可变对象的方法,无参数,无返回值,但会影响改变对象

例如:

>>> a = [2,5,1,3,0,1,8]
>>> a.sort()
>>> a
[0, 1, 1, 2, 3, 5, 8]

2.sorted()

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

sorted()不会发生上述情况,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串)

例如:

>>> a = [2,5,1,3,0,1,8]
>>> sorted(a)
[0, 1, 1, 2, 3, 5, 8]
参数解释:

(1)iterable指定要排序的list或者iterable。

(2)cmp为带两个参数的比较函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,。

(3)key为函数,指定取待排序元素的哪一项进行排序。

例如:

>>> s = [('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s,key = lambda x: x[2])
[('c', 'lisi', 10), ('a', 'zhangsan', 17), ('b', 'lisi', 23)]
>>> sorted(s,key = lambda x: x[0])
[('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]

(4)reverse参数表示升序排列还是降序排列,默认为false(升序排列),定义为True时将按降序排列。
常和operator.itemgetter()连用。

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为需要获取的数据在对象中的索引值。

例如:

>>> import operator
>>> s = [('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s, key=operator.itemgetter(2))
[('c', 'lisi', 10), ('a', 'zhangsan', 17), ('b', 'lisi', 23)]
>>> sorted(s, key=operator.itemgetter(0))
[('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s, key=operator.itemgetter(1))
[('b', 'lisi', 23), ('c', 'lisi', 10), ('a', 'zhangsan', 17)]
也可以进行多级排序。

例如:

>>> sorted(s, key=operator.itemgetter(1,2))
[('c', 'lisi', 10), ('b', 'lisi', 23), ('a', 'zhangsan', 17)]
先根据lisi,zhangsan排序,若名称相同,则再按照数字排序。

3.argsort()

argsort()函数返回的是数组值从小到大的索引值。

例如:

>>> from numpy import *
>>> x = array([6,3,9,2,7])
>>> argsort(x)
array([3, 1, 0, 4, 2])


[6,3,9,2,7]对应的索引值分别为[0,1,2,3,4],将其从小到大排列后应该为[2,3,6,7,9],2的索引为3,3的索引为1,6的索引0,7的索引为4,9的索引为2。按照顺序返回所有的索引值为[3, 1, 0, 4, 2]。

>>> argsort(-x) #降序排序
array([2, 4, 0, 1, 3])


另外,reverse()和reversed()也是用来排序,表示逆序,但不是降序。reverse()与sort()的使用方式一样,而reversed()与sorted()的使用方式相同。

例如:

>>> a = [7,0,1,3,4]
>>> a.reverse()
>>> a
[4, 3, 1, 0, 7]
>>> a = [7,0,1,3,4]
>>> reversed(a)
<listreverseiterator object at 0x02DEDBB0>
>>> for i in reversed(a):
	print i

	
4
3
1
0
7






  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值