Python使用sort和class实现的多级排序功能示例


Posted in Python onAugust 15, 2018

本文实例讲述了Python使用sort和class实现的多级排序功能。分享给大家供大家参考,具体如下:

# -*- coding:utf-8 -*-
import random
class Temp:
  def __init__(self, a, b, c):
    self.a = a
    self.b = b
    self.c = c
  def __str__(self):
    return ( ('[a: %d b: %d c: %d]' % (self.a, self.b, self.c)))
def cmp1(temp1, temp2):
  if (temp1.a > temp2.a):
    return 1;
  elif(temp1.a == temp2.a):
    if (temp1.b>temp2.b):
      return 1;
    elif(temp1.b == temp2.b):
      return 0;
    else:
      return -1;
  else:
    return -1;
def cmp2(temp1):
  return temp1.a
temp = []
for i in range(200):
  a = random.randint(1, 100)
  b = random.randint(1, 100)
  c = random.randint(1, 100)
  temp.append(Temp(a,b,c))
# for i in range(10):
#   print(temp[i])
#   
print 
print 
# for i in sorted(temp,cmp = cmp1):
#   print(temp[i])
temp.sort(cmp1)
for i in range(200):
  print(temp[i])

运行结果:

[a: 1 b: 61 c: 91]
[a: 1 b: 62 c: 4]
[a: 1 b: 66 c: 6]
[a: 1 b: 73 c: 8]
[a: 2 b: 24 c: 100]
[a: 2 b: 26 c: 26]
[a: 2 b: 52 c: 90]
[a: 4 b: 69 c: 36]
[a: 4 b: 100 c: 66]
[a: 7 b: 59 c: 10]
[a: 7 b: 97 c: 24]
[a: 8 b: 32 c: 84]
[a: 8 b: 49 c: 90]
[a: 9 b: 13 c: 22]
[a: 9 b: 29 c: 99]
[a: 10 b: 52 c: 11]
[a: 11 b: 2 c: 62]
[a: 11 b: 20 c: 56]
[a: 11 b: 38 c: 17]
[a: 11 b: 72 c: 2]
[a: 12 b: 13 c: 48]
[a: 15 b: 39 c: 24]
[a: 15 b: 64 c: 84]
[a: 16 b: 31 c: 89]
[a: 16 b: 60 c: 15]
[a: 16 b: 68 c: 33]
[a: 17 b: 44 c: 97]
[a: 17 b: 82 c: 41]
[a: 17 b: 96 c: 4]
[a: 19 b: 47 c: 22]
[a: 19 b: 97 c: 91]
[a: 20 b: 35 c: 87]
[a: 20 b: 45 c: 71]
[a: 20 b: 58 c: 45]
[a: 21 b: 5 c: 29]
[a: 21 b: 12 c: 1]
[a: 21 b: 24 c: 84]
[a: 21 b: 27 c: 41]
[a: 21 b: 34 c: 4]
[a: 21 b: 44 c: 38]
[a: 21 b: 63 c: 60]
[a: 21 b: 88 c: 60]
[a: 22 b: 15 c: 39]
[a: 23 b: 6 c: 90]
[a: 23 b: 45 c: 36]
[a: 23 b: 95 c: 92]
[a: 24 b: 44 c: 48]
[a: 24 b: 79 c: 86]
[a: 25 b: 40 c: 24]
[a: 25 b: 80 c: 46]
[a: 25 b: 100 c: 40]
[a: 26 b: 34 c: 74]
[a: 26 b: 79 c: 23]
[a: 27 b: 6 c: 51]
[a: 27 b: 8 c: 8]
[a: 27 b: 28 c: 86]
[a: 27 b: 71 c: 48]
[a: 28 b: 5 c: 9]
[a: 29 b: 11 c: 91]
[a: 29 b: 42 c: 17]
[a: 29 b: 47 c: 21]
[a: 31 b: 80 c: 86]
[a: 32 b: 18 c: 24]
[a: 32 b: 30 c: 29]
[a: 32 b: 81 c: 55]
[a: 33 b: 33 c: 10]
[a: 33 b: 36 c: 83]
[a: 34 b: 11 c: 27]
[a: 34 b: 60 c: 52]
[a: 34 b: 62 c: 45]
[a: 34 b: 72 c: 37]
[a: 35 b: 81 c: 50]
[a: 35 b: 88 c: 3]
[a: 36 b: 11 c: 64]
[a: 36 b: 57 c: 93]
[a: 36 b: 92 c: 2]
[a: 38 b: 58 c: 83]
[a: 39 b: 39 c: 66]
[a: 39 b: 47 c: 15]
[a: 40 b: 13 c: 3]
[a: 40 b: 50 c: 66]
[a: 40 b: 99 c: 71]
[a: 41 b: 14 c: 48]
[a: 42 b: 23 c: 38]
[a: 42 b: 26 c: 30]
[a: 42 b: 32 c: 60]
[a: 42 b: 33 c: 61]
[a: 43 b: 27 c: 53]
[a: 43 b: 66 c: 69]
[a: 43 b: 69 c: 81]
[a: 43 b: 71 c: 51]
[a: 44 b: 8 c: 60]
[a: 44 b: 20 c: 7]
[a: 44 b: 48 c: 51]
[a: 44 b: 59 c: 45]
[a: 45 b: 55 c: 95]
[a: 47 b: 45 c: 25]
[a: 47 b: 79 c: 16]
[a: 48 b: 10 c: 32]
[a: 48 b: 17 c: 17]
[a: 48 b: 80 c: 63]
[a: 49 b: 90 c: 32]
[a: 49 b: 93 c: 54]
[a: 50 b: 14 c: 95]
[a: 50 b: 21 c: 75]
[a: 50 b: 41 c: 24]
[a: 50 b: 54 c: 98]
[a: 50 b: 81 c: 70]
[a: 51 b: 33 c: 62]
[a: 52 b: 53 c: 87]
[a: 53 b: 68 c: 68]
[a: 53 b: 70 c: 74]
[a: 53 b: 74 c: 96]
[a: 54 b: 33 c: 16]
[a: 55 b: 80 c: 74]
[a: 55 b: 88 c: 99]
[a: 55 b: 95 c: 44]
[a: 56 b: 14 c: 81]
[a: 56 b: 70 c: 87]
[a: 57 b: 29 c: 21]
[a: 57 b: 81 c: 51]
[a: 58 b: 79 c: 11]
[a: 58 b: 80 c: 87]
[a: 60 b: 78 c: 100]
[a: 61 b: 82 c: 48]
[a: 62 b: 35 c: 64]
[a: 62 b: 65 c: 24]
[a: 62 b: 99 c: 100]
[a: 63 b: 7 c: 61]
[a: 64 b: 24 c: 86]
[a: 64 b: 41 c: 52]
[a: 64 b: 42 c: 40]
[a: 64 b: 63 c: 92]
[a: 66 b: 9 c: 51]
[a: 66 b: 68 c: 78]
[a: 66 b: 78 c: 30]
[a: 66 b: 94 c: 74]
[a: 67 b: 75 c: 41]
[a: 67 b: 78 c: 78]
[a: 68 b: 39 c: 91]
[a: 68 b: 42 c: 19]
[a: 68 b: 42 c: 63]
[a: 69 b: 15 c: 89]
[a: 69 b: 34 c: 86]
[a: 69 b: 37 c: 11]
[a: 69 b: 44 c: 87]
[a: 69 b: 95 c: 68]
[a: 70 b: 44 c: 98]
[a: 70 b: 79 c: 61]
[a: 71 b: 28 c: 95]
[a: 71 b: 81 c: 38]
[a: 72 b: 92 c: 1]
[a: 74 b: 34 c: 74]
[a: 74 b: 67 c: 72]
[a: 75 b: 4 c: 70]
[a: 76 b: 79 c: 90]
[a: 77 b: 71 c: 73]
[a: 78 b: 19 c: 28]
[a: 79 b: 5 c: 17]
[a: 79 b: 84 c: 100]
[a: 79 b: 89 c: 2]
[a: 79 b: 99 c: 33]
[a: 81 b: 17 c: 70]
[a: 81 b: 95 c: 97]
[a: 83 b: 47 c: 51]
[a: 84 b: 22 c: 68]
[a: 84 b: 45 c: 35]
[a: 84 b: 49 c: 63]
[a: 84 b: 90 c: 89]
[a: 85 b: 41 c: 78]
[a: 85 b: 60 c: 19]
[a: 85 b: 61 c: 84]
[a: 86 b: 37 c: 12]
[a: 86 b: 63 c: 17]
[a: 87 b: 5 c: 7]
[a: 87 b: 53 c: 25]
[a: 87 b: 79 c: 38]
[a: 88 b: 4 c: 90]
[a: 89 b: 8 c: 34]
[a: 89 b: 59 c: 21]
[a: 90 b: 1 c: 5]
[a: 90 b: 50 c: 87]
[a: 91 b: 93 c: 63]
[a: 92 b: 81 c: 47]
[a: 92 b: 89 c: 27]
[a: 92 b: 94 c: 51]
[a: 94 b: 37 c: 71]
[a: 95 b: 25 c: 15]
[a: 95 b: 39 c: 56]
[a: 95 b: 59 c: 39]
[a: 96 b: 9 c: 64]
[a: 96 b: 50 c: 20]
[a: 97 b: 12 c: 45]
[a: 97 b: 24 c: 95]
[a: 97 b: 36 c: 72]
[a: 97 b: 41 c: 40]
[a: 97 b: 80 c: 7]
[a: 99 b: 33 c: 23]
[a: 99 b: 56 c: 16]
[a: 100 b: 51 c: 66]

几点需要说明的:

  1. sort接受三个默认的参数,一定要理解cmp函数的含义。我的理解:当a>b时,return 1;意思越大的值越往后排
  2. cmp1()函数中一定要用return a-b,而前往不要return a>b.因为在Python中,有a==b的时候的判断,感觉和c++不太一样
Python 相关文章推荐
深入浅出分析Python装饰器用法
Jul 28 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Eclipse配置python默认头过程图解
Apr 26 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
python 实现汉诺塔游戏
Nov 28 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 #Python
Centos下实现安装Python3.6和Python2共存
Aug 15 #Python
详解Python中的type和object
Aug 15 #Python
python 通过 socket 发送文件的实例代码
Aug 14 #Python
Python 打印中文字符的三种方法
Aug 14 #Python
django如何连接已存在数据的数据库
Aug 14 #Python
Python requests库用法实例详解
Aug 14 #Python
You might like
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
js实现烟花特效
2020/03/02 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
python的mysqldb安装步骤详解
2017/08/14 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python区块及区块链的开发详解
2019/07/03 Python
毕业生自我鉴定实例
2014/01/21 职场文书
工作会议方案
2014/05/21 职场文书
党员倡议书
2015/01/19 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
小学大队委竞选口号
2015/12/25 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
python中super()函数的理解与基本使用
2021/08/30 Python