1.基本排序

  • list.sort():在原列表上排序。
  • newlist = sorted(list):生成新的排序后的列表。
    例如:
rowlist = [5,2,3,1,4]
rowlist.sort()
# 结果 rowlist = [1,2,3,4,5]newlsit = sorted(rowlist)
# 结果 newlist = [1,2,3,4,5]
# 结果 rowlist = [5,2,3,1,4]

2.关键函数key

主要是用来比较的元素,它接收一个参数并返回一个用于排序的键。例如:

# 例1
rowlist = "This is a test string from Andrew".splist( )
newlist = sorted(rowlist, key=str.lower)
# 结果 newlist = ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']# 例2
student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
new_student_tuples = sorted(student_tuples, key=lambda student: student[2])
# 结果 new_student_tuples  = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]# 例3
class Student:def __init__(self, name, grade, age):self.name = nameself.grade = gradeself.age = agedef __repr__(self):return repr((self.name, self.grade, self.age))
student_objects = [Student('john', 'A', 15), Student('jane', 'B', 12), Student('dave', 'B', 10)]
new_student_objects = sorted(student_objects, key=lambda student: student.age)
# 结果 new_student_objects = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

3.Operator 模块函数

Operator 模块有 itemgetter() 、 attrgetter() 和 methodcaller() 函数。使用这些函数,上述示例变得更简单,更快捷:

from operator import itemgetter, attrgetternew_student_tuples = sorted(student_tuples, key=itemgetter(2))
# 结果 new_student_tuples  = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]new_student_objects = sorted(student_objects, key=attrgetter('age'))
# 结果 new_student_objects = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

Operator 模块功能允许多级排序。 例如先按 grade 排序,然后按 age 排序:

new_student_tuples = sorted(student_tuples, key=itemgetter(1,2))
# 结果 new_student_tuples  = [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]new_student_objects = sorted(student_objects, key=attrgetter('grade', 'age'))
# 结果 new_student_objects = [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]# 先升序后降序
people = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
people.sort(key=lambda x : (x[0], -x[1]))
# 结果 people = [[4, 4], [5, 2], [5, 0], [6, 1], [7, 1], [7, 0]]

4.升序和降序

reverse=True:降序;
reverse=False:升序,默认。
例:

new_student_objects = sorted(student_objects, key=attrgetter('age'), reverse=True)
# 结果 new_student_objects = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

5.排序稳定性

data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
newdata = sorted(data, key=itemgetter(0))
# 结果 newdata = [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]
# 具有相同键值的记录保留了在原始数据中的先后顺序。

6.其它

  • 对于区域相关的排序,请使用 locale.strxfrm() 作为键函数,或者 locale.strcoll() 作为比较函数。

  • reverse 参数仍然保持排序稳定性。

  • 在两个对象之间进行比较时,保证排序例程使用 lt() 。 因此,通过定义 lt() 方法,可以很容易地为类添加标准排序顺序:

    Student.__lt__ = lambda self, other: self.age < other.age
    new_student_objects = sorted(student_objects)
    # 结果 new_student_objects  = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    
  • 键函数不需要直接依赖于被排序的对象,键函数还可以访问外部资源。例如,如果学生成绩存储在字典中,则可以使用它们对单独的学生姓名列表进行排序:

    students = ['dave', 'john', 'jane']
    newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'}
    new_students = sorted(students, key=newgrades.__getitem__)
    # 结果 new_students = ['jane', 'dave', 'john']
    

Python-list排序方法相关推荐

  1. python的for语句写新的字符串_python写for循环python字符串排序方法

    一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort( ...

  2. python list map成员排序_python的map关于Python列表排序方法reverse、sort、sorted详细说明...

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  3. Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  4. python 列表排序方法sort、sorted技巧篇

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...

  5. python字符串排序方法

    一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort( ...

  6. python字典排序方法_Python字典的排序方法一则

    今天需要对Python的字典进行排序,以获得有效的时间序列,采用了如下方法: 首先生成一个示例字典: >>> range_a = random.sample(range(0, 10) ...

  7. python列表排序方法-python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  8. python list排序方法_python中List的sort方法指南

    简单记一下python中List的sort方法(或者sorted内建函数)的用法. List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, ...

  9. python字典排序方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.字典排序 二.题目 总结 -参考文档:https://blog.csdn.net/weixin_38739735/art ...

  10. python字符串排序方法(按字母大小顺序来排)

    rnb = "mawdsddsddddfg" pxrnb = "".join((lambda x:(x.sort(),x)[1])(list(rnb))) pr ...

最新文章

  1. Ubuntu 安装OpenCV3.0.0
  2. android.hardware.camera2使用指南
  3. 判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你
  4. 微信小程序支付java视频_【原创】微信小程序支付(普通模式,公众号支付同适用)java后台案例...
  5. 反射与泛型 java_深入理解Java的反射和泛型
  6. redhat-5.4故障排除
  7. opencv获取人脸眼镜位置_用opencv检测人眼并定位瞳孔位置
  8. 编译Notepad2语法高亮记事本源码心得
  9. 树莓派4B 编译安装rtl8192eu usb网卡驱动
  10. Tomcat启动,提示 The JRE_HOME environment variable is not defined correctly 问题。
  11. 在浏览器访问action中的方法(动态方法调用)
  12. 如何解决ABBYY FineReader 12识别字体字符错误的问题
  13. 施密特正交化过程编程c语言,利用C程序编写格拉姆-施密特正交化的过程..docx
  14. 基于量子计算的无收益标的资产欧式看涨期权定价和delta风险分析
  15. 科一科四题库技巧软件源码
  16. 道翰天琼认知智能为您解密:Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会 「自2016年以来,Facebook 就已开始使用 Rust,并应用在开发
  17. PCL 点云的旋转与平移
  18. GPS实验二:GPS接收机的使用
  19. 1504.ICCVPartial Person Re-Identification 论文笔记
  20. 历年CCF-CSP认证考试题目解法/思想

热门文章

  1. 三相MMC并网逆变器 模块化多电平变换器 相间环流抑制 子模块电容电压均衡 载波移相调制
  2. 图像灰度化的常用三种方式及其实现
  3. HTML行内元素、块状元素、行内块状元素介绍
  4. tniker热修复命令行接入
  5. java中MVC原理详解,SpringMVC运行原理,MVC的基本原理
  6. SHA256加密(python和Qt)
  7. SAP PS 第6节 项目产成品产出
  8. HTML马里奥小游戏
  9. 新版王者英雄图鉴介绍微信小程序源码
  10. 上传功能ie9_IE9的新增功能