python中sorted如何使用
来源:互联网 发布:数据报表怎么做好看 编辑:程序博客网 时间:2024/05/18 04:55
Python 列表内置了一个 list.sort() 方法在“原地”排序。内置函数 sorted() 从一个可迭代对象返回一个新的排序列表。在本文中,我们探讨了使用Python对数据进行排序的各种技术。排序基础简单的升序排序很容易:只需调用sorted()函数。它返回一个新的排序列表:>>> sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]您还可以使用列表的list.sort()方法。它会原位修改列表(并返回None以避免混淆)。相对于sorted()来说它会不太方便- 但如果你不需要原始列表,它稍微更有效率。>>> a = [5, 2, 3, 1, 4]>>> a.sort()>>> a[1, 2, 3, 4, 5]另一个区别是list.sort()方法仅为列表定义。相比之下,sorted()函数接受任何可迭代对象。>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})[1, 2, 3, 4, 5]Key Functions(Key的使用)从Python 2.4开始,list.sort()和sorted()添加了Key参数来指定要在每个列表上调用的函数元素之前进行比较。例如,下面是一个不区分大小写的字符串比较:>>> sorted("This is a test string from Andrew".split(), key=str.lower)['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']Key参数的值应为接受单个参数并返回键以用于排序目的的函数。这种技术是快速的,因为对于每个输入记录精确地调用一次键功能。一个常见的模式是使用一些对象的索引作为键对复杂对象进行排序。例如:>>> student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]相同的技术适用于具有命名属性的对象。例如:>>> class Student: def __init__(self, name, grade, age): self.name = name # 姓名 self.grade = grade # 年级 self.age = age # 年龄 def __repr__(self): return repr((self.name, self.grade, self.age))>>> student_objects = [ Student('john', 'A', 15), Student('jane', 'B', 12), Student('dave', 'B', 10),]>>> sorted(student_objects, key=lambda student: student.age) # 通过年龄从小到大排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]Operator Module Functions上面显示的键功能模式是非常常见的,所以Python提供了方便的功能,使访问器功能更容易和更快。运算符模块具有operator.itemgetter(),operator.attrgetter(),并从Python 2.5 a operator.methodcaller()函数开始使用这些函数,上述示例变得更简单和更快:>>> from operator import itemgetter, attrgetter>>>>>> sorted(student_tuples, key=itemgetter(2))[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]>>>>>> sorted(student_objects, key=attrgetter('age'))[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)The operator模块功能允许多级排序。例如,先按年级,然后按年龄进行排序:>>> sorted(student_tuples, key=itemgetter(1,2))[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]>>>>>> sorted(student_objects, key=attrgetter('grade', 'age'))[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]operator.methodcaller()函数使用固定参数为正在排序的每个对象调用方法。例如,str.count()方法可用于通过计算消息中感叹号的数量来计算消息优先级:>>> messages = ['critical!!!', 'hurry!', 'standby', 'immediate!!']>>> sorted(messages, key=methodcaller('count', '!'))['standby', 'hurry!', 'immediate!!', 'critical!!!']Ascending and Descending(升序和降序)list.sort()和sorted()接受带有布尔值的reverse参数。这用于标记降序排序。例如,要按照年龄顺序获取学生数据:>>> sorted(student_tuples, key=itemgetter(2), reverse=True)[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>> sorted(student_objects, key=attrgetter('age'), reverse=True)[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]Sort Stability and Complex Sorts(排序稳定性和复杂排序)从Python 2.2开始,排序保证稳定。这意味着当多个记录具有相同的键时,它们的原始顺序被保留。>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]>>> sorted(data, key=itemgetter(0))[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]注意blue的两个记录如何保留其原始顺序,以便保证('blue',1)在('blue',2)之前。这个奇妙的属性让你在一系列的排序步骤中构建复杂的排序。例如,要按年级降序排序学生数据,然后按年龄升序,请先按年龄排序,然后使用年级:>>> s = sorted(student_objects, key=attrgetter('age')) # sort on secondary key>>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key, descending[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]Python中使用的imsort算法有效地执行多种排序,因为它可以利用数据集中已存在的任何排序。文档中还有几种已经过时的方法,不再赘余官方网站链接:http://python.usyiyi.cn/translate/python_278/howto/sorting.html'''
0 0
- python中sorted如何使用
- Python中sorted函数的使用
- python中sorted()函数
- python 中sorted()函数
- python 中sorted()函数
- Python中如何使用weka
- Python中__del__如何使用
- Python中如何使用最小二乘法
- python中sorted实战应用
- python 中 sort(), sorted(), argsort()
- Python 中 sorted 的用法
- 【Python】sorted函数的使用
- python 中如何使用pywin 中的MFC
- 如何在python中使用sqlite3
- 在python中如何使用sys.argv
- PYTHON中如何使用*ARGS和**KWARGS
- 如何在Python中使用urllib2
- 机器学习:Python中如何使用最小二乘法
- 子线程中能不能 new handler?为什么?
- 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
- (OK) angular2-data-table is a Angular2 component for presenting large and complex data.
- PMP笔记:执行过程组检查事项
- AIDL使用入门
- python中sorted如何使用
- 数据结构和算法------ArrayList的实现
- 测试用例设计技巧
- 编码GBK字符无法自动映射的解放办法
- 使用HttpMessageConverter处理JSON
- 深入理解javascript中的立即执行函数(function(){…})()
- Android 中的动画
- J2SE第四章——异常(一)
- maven学习(1):win10及ubuntu安装maven