您的位置:首页 > 编程语言 > Python开发

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

2016-07-22 18:36 465 查看
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


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 排序