转:Python的sort()

QT-使用ECharts显示地图,还有更多惊艳的图表等待你的使用 QT-使用ECharts显示地图前言一、使用步骤1.下载示例2. QT使用HTML文件配置3.使用HTML文件4. 数据交互及自适应总结注意:这个地图是百度的在线地图,需要百度API密钥和在联网的状态下使用。离线使用图表 前言 我上文QT图表chart-饼状图,使用qt自带的图表库charts来显示图表,实现数据可视化,但是QT自带的图表库显示效果并不佳,通俗说,就是不好看。 然而,有这么一个开源图表库,图表种类极多,并且效果良好,能够实现具有很好的视觉冲击的数据可视化。 它就是Apache ECharts 阅读详情

之前学习第九章的排序小结的时候,对sort()排序方法不理解,因为括号里面带了自定义的比较函数。

后来查手册,才发现sort()里面本来就带了这样的参数。能够自定义比较方法,确实很灵活。

不仅如此,在网上查到一个博客,作者不单停留在这表面,还查究了sort()的排序算法,确实有意思。

全文抄录如下:

 

http://blog.donews.com/maverick/archive/2006/07/09/951101.aspx

 

学习笔记:Python的排序

 

Python语言内置了sort方法,可以很方便地对某个List进行排序:
L = [6, 5, 1, 3, 4, 2]
L.sort()
print L

---------- Run Python Program ----------
[1, 2, 3, 4, 5, 6]

某些时候,我们希望按照自己定义的排序规则来排序(例如,按关键词的权重排序,按人的年龄排序,等等)。在Java语言中,我们可以自定义Comparator来实现,Python中也提供了类似的办法。

若List中每个元素都是2-tuple,tuple中第一个元素为String类型的keyword,第二个元素为该字符串对应的权重(int类型),希望按照权重排序(从高到低),则可以这样:
def my_cmp(E1, E2):
    return -cmp(E1[1], E2[1])    #compare weight of each 2-tuple
                    #return the negative result of built-in cmp function
                    #thus we get the descend order

L = [('a', 0), ('b', 1), ('c', 2), ('d', 3)]
L.sort(my_cmp)
print L

---------- Run Python Program ----------
[('d', 3), ('c', 2), ('b', 1), ('a', 0)]

正因为可以自定义cmp方法,我们不妨探究一下,built-in的sort方法,到底是采用的哪一种排序算法:
from random import shuffle

def my_cmp(E1, E2):
    print 'E1:', E1, 'E2:', E2
    return cmp(E1, E2)

L = range(0, 10)
shuffle(L)
print L
L.sort(my_cmp)

---------- Run Python Program ----------
[5, 3, 7, 6, 2, 8, 9, 4, 1, 0]
E1: 3 E2: 5
E1: 7 E2: 3
E1: 7 E2: 5
E1: 6 E2: 5
E1: 6 E2: 7
E1: 2 E2: 6
E1: 2 E2: 5
E1: 2 E2: 3
E1: 8 E2: 5
E1: 8 E2: 7
E1: 9 E2: 6
E1: 9 E2: 8
E1: 4 E2: 6
E1: 4 E2: 3
E1: 4 E2: 5
E1: 1 E2: 6
E1: 1 E2: 4
E1: 1 E2: 3
E1: 1 E2: 2
E1: 0 E2: 5
E1: 0 E2: 3
E1: 0 E2: 2
E1: 0 E2: 1

可以看到,每次调用my_cmp,E1依次是List中的第2、3、4……直到最后一个元素,可以肯定sort不是采用的分治法(devide-and-conqure)
看前三次调用,可以发现sort采用的是典型的插入排序——也就是说,将新元素插入已排序部分的合适位置,查找位置时采用的似乎是从后向前线形探察的办法。从元素6开始,新元素不再直接与已排序部分的最后元素比较,而是先与中间值比较,采用二分检索探察合适位置,这样,可以把时间代价从n缩小到log(n)。
至此,我们可以认为,built-in的sort方法,采用的是“二分法插入排序”(binary insertion)的算法。

为了检测这个结论,可以输入一个已排序的数组,看看结果。
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
L.sort(my_cmp)

---------- Run Python Program ----------
E1: 1 E2: 0
E1: 2 E2: 1
E1: 3 E2: 2
E1: 4 E2: 3
E1: 5 E2: 4
E1: 6 E2: 5
E1: 7 E2: 6
E1: 8 E2: 7
E1: 9 E2: 8
E1: 10 E2: 9

结果发现,比较的次数非常少,插入每个元素的时候,只会与它之前紧邻的元素比较,而不是二分检索。这真是个有意思的现象。

改一改程序
L = [0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10]
L.sort(my_cmp)

---------- Run Python Program ----------
E1: 1 E2: 0
E1: 2 E2: 1
E1: 3 E2: 2
E1: 4 E2: 3
E1: 5 E2: 4
E1: 6 E2: 5
E1: 8 E2: 6
E1: 7 E2: 8
E1: 7 E2: 4
E1: 7 E2: 6
E1: 7 E2: 8
E1: 9 E2: 4
E1: 9 E2: 7
E1: 9 E2: 8
E1: 10 E2: 5
E1: 10 E2: 8
E1: 10 E2: 9

可以看到,在数字8以前,List中的元素都是有序的,于是sort算法也只比较欲插入元素和已排序序列的最后一个元素;一旦发现输入序列不是自然有序之后,就采用二分插入排序算法。
这样的混合排序算法,相对单纯的插入排序,保证了最好条件下时间代价最低,也减小了一般情况下的时间代价。

p.s.
写完之后查阅Python的文档,发现sort采用的是混合(hybrid)排序,规模小的时候采用binary insertion,规模大的时候采用samplesort(据说是quicksort的一个变种,我没接触过,汗....)

Vue2 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码) vue2,nuxt2,海康威视,海康监控,摄像头监控,vue对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue,海康,vue海康视频监控,海康开放平台,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue2对接海康监控设备,无法连 阅读详情

相关推荐

医学影像弹性形变处理

这段代码的主要流程是:读取 DICOM 医学影像,尝试使用 MONAI 进行弹性形变(根据版本适配),如果失败则使用 OpenCV 实现,最后可视化并保存处理结果。这样可以在不同环境下灵活处理医学影像的弹性形变需求。后面会写一篇解释弹性变形方法的短文。

wh_xia_jun的专栏 780

Python的排序 [转]

Python语言内置了sort方法,可以很方便地对某个List进行排序: L = [6, 5, 1, 3, 4, 2] L.sort() print L ---------- Run Python Program ---------- [1, 2, 3, 4, 5, 6] 某些时候,我们希望按照自己定义的排序规则来排序(例如,按关键词的权重排序,按人的年龄排序,等等)。在Jav...

weixin_30561177的博客 157

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

sorted和sort的区别

这几天在看python的基础知识,整理下sorted和sort的去呗 在python的排序有两个方法,一个是list对象的sort方法,另外一个是builtin函数里面sorted,主要区别: 1.sort仅针对于list对象排序,无返回值, 会改变原来队列顺序 2.sorted是一个单独函数,可以对可迭代(iteration)对象排序,不局限于list,它不改变原生数据,重新生成一个新的队列 s...

qq_29535381的博客 3579

AI视频生成提示词工程:结构化公式与实战案例详解

在实际使用 AI 生成视频或图像时,最常遇到的困惑是:为什么我的提示词(Prompt)生成的画面总是不理想?是模型能力不足,还是我的描述有问题?答案往往是后者。提示词工程(Prompt Engineering)并非简单的“翻译”需求,而是一门需要结构化思维和精准描述的技能。它决定了 AI 能否准确理解你的意图,并生成符合预期的视觉内容。 本文将通过两个核心案例,深入拆解提示词的构建逻辑。第一个案例聚焦于“文生视频”,我们将学习如何将一个简单的想法,如“小猫在雪地里玩雪球”,通过结构化公式扩展为一段富有细节和

weixin_30800987的博客 565

实战指南:CentOS 7下VOS3000 8.0从零部署到授权激活全流程

本文提供了一份详尽的CentOS 7系统下部署VOS3000 8.0的实战指南。从环境准备、使用FileZilla上传安装包、执行自动化安装脚本,到获取软件码、利用注册机生成授权文件并激活,手把手带领用户完成从零部署到投入商用的全流程,确保系统稳定运行。

zero1的博客 897

Python每日小结(一)之 List pop()、sort()与built-in sorted

       1.Python List pop()方法        pop()函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。        示例:                该函数可以指定pop列表中的某一个元素,而不仅仅是两端的,list.pop(index)即可。       2.sorted函数的使用        我们对于List进行排序有两种方法:    ...

微念的博客 631

告别MRT!用ArcGIS脚本批量处理MODIS数据,从HDF到NDVI/ET成品图全流程(附Python代码)

本文详细介绍了使用ArcGIS Python脚本自动化处理MODIS数据的全流程,从HDF文件提取到生成NDVI/ET成品图。通过优化子数据集提取、智能镶嵌策略和投影转换等核心步骤,大幅提升处理效率,告别传统MRT工具的手工操作。附带的Python代码可直接应用于实际项目,特别适合批量处理大规模遥感数据。

weixin_30872337的博客 220

桶排序和样本排序(Bucket Sort and Sample Sort)

9.5桶排序和样本排序 桶排序(bucket sort)算法是一种流行的串行算法,用于排序包含n个元素数组,其值在区间[a, b]上匀分布。在该算法中,区间[a, b]被分为m个大小相等的子区间称为桶,并且每个元素被放置在适当的桶中。由于n个元素在区间[a, b]上均匀分布,每个桶的元素数目大致为n/m。然后,该排序算法对每个桶中的元素进行排序。该算法的运行时间是Q(nlog(n/m))

Zhouyangchao的专栏 5944

CTF命令执行绕过实战:从空格过滤到无回显外带的7种核心姿势

命令执行漏洞是Web安全中的常见高危漏洞,其核心原理在于应用程序未对用户输入进行充分过滤,导致攻击者能够注入并执行系统命令。在真实环境中,安全防护措施(如WAF、输入过滤函数)普遍存在,因此漏洞利用的关键技术在于“绕过”这些过滤机制。理解过滤器的运作逻辑(如黑名单、白名单、转义、长度限制)是成功绕过的前提。通过系统学习**空格绕过**、**命令黑名单绕过**、**编码混淆**等基础技巧,并结合**无回显外带**、**反弹Shell**等高级利用链,安全研究人员能够有效应对复杂防护场景。本文以CTFshow

weixin_29315091的博客 370

热力学仿真软件:SimScale_(1).SimScale入门与基础操作

导航栏:位于页面顶部,包含项目管理、仿真设置、结果分析等主要功能。项目列表:展示用户创建的所有项目。工作区:用于进行具体的操作,如几何建模、网格划分、边界条件设置等。控制台:显示操作日志和仿真进度。网格划分是将几何模型离散化为一系列小单元的过程,这些单元用于求解热力学方程。SimScale提供了多种网格划分方法,包括结构化网格和非结构化网格。SimScale提供了丰富的API接口,用户可以通过编程语言进行二次开发,实现自动化仿真和结果分析。项目管理:创建、删除和管理项目。几何建模:创建、导入和修复几何模型。

kkchenjj的博客 1870

Python sort使用方法

sort()是列表的一个排序方法,直接修改原列表,没有返回值。 sorted()使用范围更广,不局限于列表,能接受所有迭代器,返回排好序的新列表。 使用方法: list.sort(*, key=None, reverse=None) sorted(iterable[, key][, reverse]) key 是带一个参数的函数,表示用什么方式排序。 reverse 表示排序结果是否反转 例子: a = [2, 4, 7, 1, 8, 5] sorted(a) [1, 2, 4, 5, 7, 8]

linux_tcpdump的博客 1436

静态时序分析—门控时钟检查(clock gating check)

clock gating check的条件与类型

m0_61544122的博客 9611

python的sort()和sorted()的区别_(转)Python中sort和sorted的区别和使用方法

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。1)排序基础简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序。>>> sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]你也可以使...

weixin_28808145的博客 154

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

(转)Python3:sorted()函数及列表中的sort()函数

Python3:sorted()函数及列表中的sort()函数 转载请注明作者和出处:http://blog.youkuaiyun.com/u011475210 操作系统:WINDOWS 10 软件版本:python-3.6.2-amd64 编  者:WordZzzz 一、sort,sorted函数介绍:   Sort函数是list列表中的函数,而sorted可以对lis...

dishuo2725的博客 169

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python字典倒序_<转>python字典排序 关于sort()、reversed()、sorted()

一、Python的排序1、reversed()这个很好理解,reversed英文意思就是:adj. 颠倒的;相反的;(判决等)撤销的print list(reversed(['dream','a','have','I']))#['I', 'have', 'a', 'dream']2、让人糊涂的sort()与sorted()在Python 中sorted是内建函数(BIF),而sort()是列表类型...

weixin_39692271的博客 756

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python排序 sorted()与list.sort() (转)

该文章为转载;原文地址为:https://www.cnblogs.com/zuizui1204/p/6422939.html 只要是可迭代对象都可以用sorted 。 sorted(itrearble, cmp=None, key=None, reverse=False) =号后面是默认值 默认是升序排序的, 如果想让结果降序排列,用reverse=True 最后会将排序的结果放到一...

weixin_30612769的博客 81

python元组排序_python元组怎么排序

元组tuple是不可改变的数据类型,不能修改元组中的元素,不能删除元素,不能添加元素。元组是受限制的列表。不能对元组进行排序。Python中的列表是可变对象,对可变对象可以排序,比如说:L.sort()或者sorted(L),但在元组数据结构中,因为元组是不可变对象,不会提供列表中的这些方法,方法就是先将元组转变为列表,对转变后的列表排序后,再转变回元组。这样就完成了元组的排序。【方法一:】借助于...

weixin_39998906的博客 338

python常见细节

今天在编码过程中发现在数字列表排序的过程中, 无法直接打印num.sort()进行数组排序,会返回None值 而应该执行num.sort(),然后输出num,就是排序好的数组 例如: a = [1,4,5,2,3,7] print(a.sort()) 会输出None值 a = [1,4,5,2,3,7] a.sort() print(a) 则会输出[1, 2, 3, 4, 5, 7] 第二条:前提是string,number都为list类型 将字符串转化为数字字符列表,使用map函数

wcc8848的博客 525

Python零基础入门篇 - 28 - Python中不同数据类型间的转换

586255)][外链图片转存中…(img-g0dnBuGZ-1712946586256)][外链图片转存中…(img-X4dzppoJ-1712946586256)][外链图片转存中…(img-cEUuEcXr-1712946586256)]

2401_84010326的博客 906

python列表(list)

python列表脚本操作符 python列表截取 python列表函数&方法 cmp()语句:比较两个列表大小 实例 python2.X版本: list1=[123,'abc'] list2=[456,'def'] print cmp(list1,list2) 结果为:-1 即list2比list1 大 正数:前比后大 负数:后比前大 0:前后一样大 cmp()函数已经离开了python3.X的版本,如果需要比较两个列表的大小,则需使用(a>b)-(a<b).

ruoyecc的博客 497

在Python中如何使用sorted()和sort()函数

在某种程度上,所有的程序员都必须编写代码对项目或数据进行排序。在应用程序当中,排序对于用户体验而言是非常重要的,无论是按时间戳对用户最近的活动进行排序,还是按照姓氏的字母顺序排列电子邮件收件人列表。Python的排序功能十分强大,可以在粒度级别上进行基本排序或自定义排序。 在本教程中,你将会学习如何在不同的数据结构中对各种各样的数据类型进行排序和自定义排序,并使用Python中两种不同的排序方法...

java276582434的博客 6万+

python 的sort()函数详解

python 的sort()函数详解

qq_20831401的博客 16万+

Python 列表 sort()函数使用详解

sort() 可以对列表进行「排序」

wangyuxiang946的博客 7万+

python的sort()函数详解

让sort()函数按我们想要的排列方式进行排列。

robinson_的博客 12万+

Python 列表 sort()函数使用理解

首先我们要知道sort() 可以对列表进行「排序」语法参数返回值返回None,同时将原列表排序。也就是没有返回值案例:将列表中的元素排序。

Echo_3wdiankang的博客 2万+
上一篇: android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
下一篇: 转:Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值