Tuples比较原理及包含索引的好处与Schwartzian transform介绍
创建了一个名为decorated的列表,其中包含了元组,每个元组由学生成绩、索引和对应的student对象组成,这些元组是通过遍历student_objects列表并使用enumerate函数生成的。
>>> decorated.sort()
将装饰过的学生列表中的学生信息还原,移除学生标识,恢复至原始状态。
约翰、A和15岁,Jane、B和12岁,Dave、B和10岁。
上述比较之所以可行,是因为元组适用于比较操作;在元组之间的比较过程中,首先会对比它们的第一个组成部分,若第一个元素相同,则继续比较第二个元素,依此类推。
并非在所有情形下都必须在上述元组中加入索引,然而,若加入索引,将带来以下诸多益处:
首先,排序过程保证了稳定性,当存在两个具有相同键值的元素时,它们在原始序列中的顺序得以保留;其次,这种稳定性确保了原始顺序在排序后依然保持不变。
第二,原始的元素无需参与对比,因为元组的第一个和第二个元素已足以进行判断。
Randal L. 在 Perl 语言中大力推广此方法,随后该方法便被赋予了另一个名称,即 Schwartian transform。
在处理庞大的列表或其元素时,计算过程往往相当繁琐。在Python 2.4版本之前,DSU(动态规划并查集)通常是实现排序的最快方式。然而,自2.4版本起,所提及的key函数亦能实现类似的高效排序功能。
7)其他语言普遍使用的排序方法-cmp函数
在Python 2.4版本之前,sorted函数以及list.sort()方法并未配备key参数,而是允许用户通过cmp参数来自定义比较函数。这种做法在众多编程语言中同样被广泛采用。
Python 3.0版本中,将cmp参数完全去除,此举旨在简化并统一编程语言,同时降低了高级比较操作与__cmp__方法之间可能出现的冲突问题。
在Python 2.x版本中,cmp参数所关联的函数执行元素间的对比操作。该函数接收两个参数作为输入,并据此返回相应的数值:若输出为负数,则代表前者小于后者;若输出为零,则表示两者相等;若输出为正数,则表明前者大于后者。举例来说:
« 上一篇
C1驾驶证能开哪些车及驾驶证报考所需资料全介绍
下一篇 »
php获取用户ip,php获取用户id是本地的