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

来源:互联网 发布:java处理bpmn 编辑:程序博客网 时间:2024/05/28 15:11

# 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

阅读全文
0 0
原创粉丝点击