一、列表内建方法--sort()

作用:就地对列表排序(直接在原列表上做排序)

语法

  list.sort(func=None, key=None, reverse=False)

  • 当reverse=False时:正向排序;当reverse=True时:逆向排序。默认为False。
  • 执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点
  • 该方法没有返回值

例子

>>> arr = [2,8,4,6,9,1,3]
>>> arr.sort()
>>> arr
[1, 2, 3, 4, 6, 8, 9]

  

二、内建函数sorted()

作用:对可迭代对象排序,返回一个新的已经排序好的list

差别:

  • sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
  • list.sort()方法只是应用在 list 上的方法,而sorted()可用于任何一个可迭代对象

语法:

  sorted(iterable, key=None, reverse=False)

  • 当reverse=False时:为正向排序;当reverse=True时:为反向排序。默认为False。
  • 执行完后返回一个新的排序好的list

例子

>>> arr = (3,6,7,2,1,4)
>>> sorted(arr)
[1, 2, 3, 4, 6, 7]

三、高级用法

参数key:

参数key:带一个参数的函数(排序时,会依次传入列表的每一项,作为该函数的参数)。该函数用于在比较排序之前进行的操作

例子:

每个字符串比较之前,需要统一小写

>>> test=["A","a","E","W","o"]
>>> test.sort()
>>> test
['A', 'E', 'W', 'a', 'o']

>>> test.sort(key=lambda x:x.lower())
>>> test
['A', 'a', 'E', 'o', 'W']

对于复杂的对象,使用对象的下标作为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) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

重点来了!

1.多维数组,如何在按照第一个元素排序的基础上,再按第二个关键字进行排序?

>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key = lambda x:(x[0],x[1]))
[('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]

2.多维数组,如何实现第一个元素按升序,第二个元素按降序来排列?

>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key=lambda x:(x[0], -int(x[1])))
[('a', 5), ('c', 2), ('d', 3), ('d', 2), ('d', 1)]

sort和sorted区别----引子:多维列表,如何实现第一个元素升序,第二个元素降序的更多相关文章

  1. sort 与 sorted 区别

    sort 与 sorted 区别: sort 只是应用在 list 上的方法,(就地排序无返回值). sorted 是内建函数,可对所有可迭代的对象进行排序操作,(返回新的list). 语法 sort ...

  2. sort 与 sorted 区别:

    sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值, ...

  3. python中sort与sorted区别

    1.sort()函数 (只对list有用) sort(...) L.sort(key = None,reverse=False) key = 函数 这个函数会从每个元素中提取一个用于比较的关键字.默认 ...

  4. python排序函数sort()与sorted()区别

    sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key ...

  5. python sort和sorted区别。

    前者是方法,后者是函数.oop和opp区别的经典体现.好好领会,就能知道什么时候写类什么时候写函数好.

  6. sort与sorted的区别

    描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 :         方法1.用对List的成员函数sort进行排序        方法2.用内置函数sorte ...

  7. python sort和sorted的区别

    sort 与 sorted 区别: sort 是应用在 list 上的方法,使用方法为 list.sort(),是对原有列表进行操作,改变原有列表的排序: sorted 可以对所有可迭代的对象进行排序 ...

  8. Python小白干货宝典:sorted()函数:列表元素排序

    定义: sorted() 函数对所有可迭代的对象进行排序操作. 内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作. 语法: sorted 语法: sorted(i ...

  9. python sort和sorted函数

    sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 ...

  10. sort和sorted

    sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 ...

随机推荐

  1. 4、Redis底层原理(持久化+分布式锁)

    Redis底层原理 持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即 ...

  2. c++学习 4 运算符及其应用技巧

    一 按位与运算符 "&"按位与运算符,全1为1,有0则0. 特点:和1相与保持不变,和0相与都变为0. 功能:将指定位置清0. example: 1000 1100 &am ...

  3. hdu1710 二叉树(C/C++)

    hdu1710 题目地址:https://acm.dingbacode.com/showproblem.php?pid=1710 (最近几天杭电原网址开不进去了,之后应该可以通..吧) Binary ...

  4. Vue-数据代理

    Vue中的数据代理 数据代理定义 所谓数据代理,就是通过一个对象代理对另一个对象中的属性的操作(读/写).说白了就是操作一个对象上的属性可以读取和修改另一个对象上的属性,这种关系就叫做数据代理. 在V ...

  5. QPushButton与Enter相链接

    ui->pushButton_login->setFocus(); // 设置默认焦点 ui->pushButton_login->setShortcut(QKeySequen ...

  6. 蓝桥2021 B组

    2. 卡片(结果填空) 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9. 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了. 小蓝想知道自 ...

  7. 对volatile修饰的变量使用memset函数

    背景 今天面试了一家公司,面试官问了我一个开放性的问题.大致意思是,为什么对volatile修饰的变量调用memset函数,编译的时候会报错.当然,我是不知道为什么啦.之前没有遇到过嘛.不过我还是做了 ...

  8. VOIP(SIP)呼叫环境及流程试验

    宿主机:win11  IP: .1         PHONE: 102 虚拟机: v11     IP: .129     SIP SERVER 虚拟机: v10     IP: .128      ...

  9. 11.30linux学习第十一天

    今天老刘上课,第7章收尾,第8章开了个头. 7.1.3  磁盘阵列+备份盘 RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若 ...

  10. JMeter参数化(二)--数据库参数化

    1.下载mysql驱动,解压得到mysql-connector-java-8.0.17.jar(驱动一般放在java的 \java\jre\lib\ext 路径下): 2.在 测试计划-->浏览 ...