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

# 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值