看看吧:mylist = [3,6,3,2,4,8,23]

sorted(mylist, key=WhatToSortBy)

基本示例:sorted(mylist)[2, 3, 3, 4, 6, 8, 23] # all numbers are in order from small to large.

例1:mylist = [3,6,3,2,4,8,23]

sorted(mylist, key=lambda x: x%2==0)[3, 3, 23, 6, 2, 4, 8] # Does this sorted result make intuitive sense to you?

注意,lambda函数告诉sorted在排序之前检查(e)是偶数还是奇数。

但是等等!您可能(或者应该)想知道两件事-首先,为什么我的概率会早于evens(因为我的键值似乎告诉我的排序函数通过使用x%2==0中的mod运算符来确定evens的优先级)。第二,为什么我的睡眠不正常?2比6先到对吧?通过分析这个结果,我们将进一步了解sorted()“key”参数是如何工作的,特别是与匿名lambda函数结合使用时。

首先,你会注意到,虽然赔率在晚上之前,但晚上本身并没有被排序。这是为什么??Lets read the docs:Key Functions Starting with Python 2.4, both list.sort() and sorted() added a key parameter to specify a function to be called on

each list element prior to making comparisons.

我们需要在这两行之间进行一些读取,但这告诉我们,sort函数只调用一次,如果我们指定了key参数,那么我们将根据key函数指向的值进行排序。

那么这个使用模的例子会返回什么呢?布尔值:True == 1,False == 0。那么sorted如何处理这个密钥呢?它基本上将原始列表转换为1和0的序列[3,6,3,2,4,8,23] becomes [0,1,0,1,1,1,0]

现在我们有进展了。当你对转换后的列表进行排序时会得到什么?[0,0,0,1,1,1,1]

好吧,现在我们知道为什么赔率在晚上之前。但下一个问题是:为什么在我的最终名单中,6个仍然排在2个之前?好吧,这很简单,因为分类只发生一次!i、 e.这些1仍然代表原始列表值,它们相对彼此处于原始位置。由于排序只发生一次,并且我们不调用任何排序函数来将原始偶数值从低到高排序,因此这些值相对彼此保持其原始顺序。

最后一个问题是:当我打印出最终的排序列表时,如何从概念上考虑如何将布尔值的顺序转换回原始值?

已排序()是一个内置的方法,它(有趣的事实)使用一个名为Timsort的混合排序算法,该算法结合了合并排序和插入排序的各个方面。我很清楚,当你调用它时,有一个机制将这些值保存在内存中,并将它们与由(…!)确定的布尔标识(mask)捆绑在一起lambda函数。顺序是由从lambda函数计算出的布尔恒等式决定的,但请记住,这些子列表(1和0的子列表)本身并不是按其原始值排序的。因此,虽然最终的列表是按赔率和偶数排列的,但并不是按子列表排序的(本例中的偶数是无序的)。赔率排序的事实是,它们在原始列表中已经是巧合地按顺序排列的。所有这些的好处是,当lambda进行转换时,子列表的原始顺序将被保留。

那么这一切又是如何与最初的问题联系起来的呢?更重要的是,我们的直觉告诉我们应该如何用sorted()的键参数和lambda来实现它?

lambda函数可以看作是指向需要排序的值的指针,无论它是将值映射到lambda函数转换的布尔值的指针,还是它在嵌套列表、元组、dict等中的特定元素,都再次由lambda函数确定。

让我们试着预测当我运行下面的代码时会发生什么。mylist = [(3, 5, 8), (6, 2, 8), ( 2, 9, 4), (6, 8, 5)]

sorted(mylist, key=lambda x: x[1])

我的sorted电话显然是在说,“请对这个列表进行排序”。关键参数使这一点更加具体,它说,对于mylist中的每个元素(x),返回该元素的索引1,然后根据lambda函数计算的列表排序顺序对原始列表“mylist”中的所有元素排序。因为我们有一个元组列表,所以可以从该元组返回一个索引元素。所以我们得到:[(6, 2, 8), (3, 5, 8), (6, 8, 5), (2, 9, 4)]

运行代码,你会发现这是命令。尝试索引整数列表,您会发现代码中断。

这是一个冗长的解释,但我希望这有助于“排序”您对使用lambda函数作为sorted()和beyond中的关键参数的直觉。

python中key=lambda_排序后的语法(key=lambda:…)相关推荐

  1. python中采用字典建立统,Python中使用Counter进行字典创建以及key数量统计的方法...

    这里的Counter是指collections中的Counter,通过Counter可以实现字典的创建以及字典key出现频次的统计.然而,使用的时候还是有一点需要注意的小事项. 使用Counter创建 ...

  2. python中对序列FFT后结果不是共轭对称的问题

    python中对序列FFT后结果不是共轭对称的问题 我对雷克子波进行了fft后,发现结果并不是共轭对称的. 这导致我把fft后结果取前一半区间,然后共轭对称到后一半,再反变换回去的结果就有点异常了.如 ...

  3. Python中的字典排序

    我想将 b = {'a':234,'b':1,'c':2,'e':2387} 分别按照key和value进行排序,该怎样办呢? Python中比较常用的排序有两个函数, 一.定义 (1)一个是List ...

  4. 如何在python中对列表套列表进行排序_如何实现对Python中列表的排序?

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

  5. python中的sort排序加换行_python中sort()排序的方法

    python中sort()排序的方法 发布时间:2020-09-01 10:57:52 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python中sort()排序的方法,具有一定借鉴价值 ...

  6. 使用Python把一堆图片排序后转换成PDF,最终得到一人之下漫画pdf

    目的 把一些图片转换成PDF 使用模块 os re PIL # -*- coding: utf-8 -*- # Time: 2021/4/5 14:59import os import re from ...

  7. python中的字典排序--sorted()

    字典的排序:在学习python的时候,了解到相比于列表,字典是一个无序的数据结构,一般都不对其进行排序的.但是要想对字典进行排序,是可以通过sorted()函数进行操作的! 关于字典的排序,下面从键k ...

  8. python中not加变量是_Python -- 语法和变量

    小Q:风一更,雪一更,聒碎乡心梦不成,故园无此声.           ----纳兰容若<长相思> -------------------------------------------- ...

  9. python中的列表排序

    对列表进行排序是常见的操作,最简单的方式是使用sort()函数. 1.一般用法 不管列表元素是数.字符串还是元组,函数sort()总是就地操作列表,按升序进行排列元素,并返回None. #数 > ...

最新文章

  1. PyTorch之前向传播函数自动调用forward
  2. Linux下屏蔽Ctrl+Alt+Delete
  3. 网络传输大端序_基于大端法、小端法以及网络字节序的深入理解
  4. jQuery序列化表单 serialize() serializeArray()
  5. uri和url的区别
  6. logstash redis kafka传输 haproxy日志
  7. Python线程与进程 I/O多路复用
  8. Form的is_valid校验规则及验证顺序
  9. C++之智能指针std::shared_ptr简单使用和理解
  10. vue从入门到进阶:简介(一)
  11. vue给组件传html,如何将 html 模板作为道具传递给 Vue 组件
  12. Drools只执行一个规则或者执行完当前规则之后不再执行其他规则(转)
  13. 服务器芯片组思维导图,服务器思维导图
  14. chrome frame 在 iframe frameset 下无效 的处理方法
  15. 23王道——中序线索树
  16. 令人头秃,SaaS部署和本地部署该怎么选?
  17. 慎用windows EFS文件加密
  18. mysql mdl锁_MySQL锁系列3 MDL锁
  19. sphinx 编码 php文档,用Sphinx编写技术文档
  20. Beyond Compare解决java文件对比中文乱码问题

热门文章

  1. ergonomic计算机专业英语,[听单词] 计算机专业英语词汇音频52,计算机英语单词MP3...
  2. ElasticSearch cardinality基数 算法优化内存开销及HLL算法
  3. 遥感图像-Deep Feature Alignment Neural Networks for Domain Adaptation of Hyperspectral Data高光谱数据深度特征对齐神经
  4. Oracle物化视图与物化视图日志
  5. 什么是utf8mb4和utf8mb3区别?
  6. GaussDB ETCD 服务异常实例分析处理的5种方法
  7. Error during WebSocket handshake: Unexpected response code: 429
  8. css如何让文字不换行,css如何让文字不换行显示?
  9. bs4爬虫:获取百度贴吧的内容
  10. 清理微信浏览器网页缓存的办法