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

python中排序,函数sort、sorted、argsort,collections.OrderedDict类

2017-06-03 23:47 996 查看
# python中排序,函数sort、sorted、argsort,collections.OrderedDict类

内建函数:sort、sorted

numpy:argsort

collections.OrderedDict类

## 区别

sort: 只能对list进行排序,返回的是原list的排序结果;

sorted:可以对所有可迭代的对象(list, dict, tuple等)进行排序操作,返回的是一个新的 list;

argsort:是numpy库中的函数,返回数组值排序后的索引值;

collections.OrderedDict: 使用dict时,Key是无序的.在对dict做迭代时,我们无法确定Key的顺序;如果要保持Key的顺序,可以用OrderedDict.

## 代码举例:

1、sort举例

ls = [1, 2, 8, 134, 0]

ls.sort()

结果:[0, 1, 2, 8, 134]

2、sorted举例

1) a = [54,11,6,3,4,1,2]

b = sorted(a) # 保留原列表

结果:[1, 2, 3, 4, 6, 11,54]

2) L= [(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)]

sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数

结果:[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)]

3) sorted(L, key=lambda x:x[1]) # 利用key

结果:[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)]

4) students = [(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)]

sorted(students, key=lambda s: s[2]) # 按年龄排序

结果:[(‘dave’, ‘B’, 10), (‘jane’, ‘B’, 12), (‘john’, ‘A’, 15)]

5) sorted(students, key=lambda s: s[2], reverse=True) # 按降序

[(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)]

3、argsort举例

x = np.array([3, 1, 2])

1)np.argsort(x) #按升序排列,得到的结果是排序后的索引值

array([1, 2, 0])

2)np.argsort(-x) #按降序排列

array([0, 2, 1])

3) x[np.argsort(x)] #通过索引值排序后的数组

array([1, 2, 3])

4)x[np.argsort(-x)]

array([3, 2, 1])

5) x = np.array([[0, 3], [2, 2]])

np.argsort(x, axis=0) #按列排序

array([[0, 1],[1, 0]])

6) np.argsort(x, axis=1) #按行排序

array([[0, 1],[0, 1]])

7) 另一种方式实现按降序排序:

a = x[np.argsort(x)]

array([1, 2, 3])

a[::-1]

array([3, 2, 1])

4、collections.OrderedDict举例

from collections import OrderedDict

d = dict([(‘a’, 1), (‘b’, 2), (‘c’, 3)]) # dict的Key是无序的

{‘a’: 1, ‘c’: 3, ‘b’: 2}

1) od = OrderedDict([(‘a’, 1), (‘b’, 2), (‘c’, 3)]) OrderedDict的Key是有序的

OrderedDict([(‘a’, 1), (‘b’, 2), (‘c’, 3)])

注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

2) od = OrderedDict()

od[‘z’] = 1

od[‘y’] = 2

od[‘x’] = 3

od.keys() # 按照插入的Key的顺序返回

[‘z’, ‘y’, ‘x’]

*OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

附:以下说明写的很清晰,学习了:

http://www.cnblogs.com/yushuo1990/p/5880041.htmlv

collections详细介绍:

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001411031239400f7181f65f33a4623bc42276a605debf6000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python