python——自行实现sorted函数
仿照内建函数sorted,自行实现一个sort函数,能够为列表进行排序
看下面实例的前提是掌握 0、掌握sorted函数的用法、1、函数基本概念、2、函数是如何传参的、3、掌握三元表达式、4、掌握内建函数enumerate的用法、5、掌握else子句是怎么执行的,6、insert函数的使用方法、7、函数的doc文档 可以参考本人相关博客文章
思路
- 内建函数sorted函数,返回一个新的列表,可以设置升序或降序
- 可以遍历传入列表,新建一个列表,通过新列表中的当前值比较,用插入排序的方式把数插入到新列表
这是sorted的官方文档介绍:,我们可以按照这个参数形式进行定义我们自己的函数

第一步:先写一个函数,能够传入一个列表,并且对列表中的元素进行排序
def sort(iterable):
"""
这个函数可接收一个可迭代对象(这里用列表),然后把这个列表按照大小排序
"""
new_list = [] # 新建一个列表,存放排序后的元素,这样就不会修改传入的列表了
for x in iterable: # 遍历传入的列表
for i,v in enumerate(new_list): # 遍历获取new_list中的索引和元素
if x > v: # 依次用x和new_list中的所有元素进行比较
new_list.insert(i, x) # 当发现x大于v的时候把x插入到v的前面
break # 只要插入了就把x这个数字处理好了break就不会执行else了
else: # 这样设置的目的是,第一次遍历new_lists时,new_list是空列表
new_list.append(x) # 把第一个x加入到空的new_list中,只执行一次
return new_list # 排序后返回新生成的有序的列表new_list
进行传参测试:
sort([3, 2, 6, 4, 1, 8, 5, 9, 7]) # 传入一个列表
# out: [9, 8, 7, 6, 5, 4, 3, 2, 1]
第二步,根据第一步的基础之上增加按照类型比较大小和决定升序降序
def sort(iterable, *, key=None, reverse=False):
'''
仿照上面的参数进行定义函数,这里的iterable就是用来接收传入的列表,key则是用来接收数据类型,就是每个元素按照什么类型进行排序,reverse就是用来决定排序是按照升序排还是降序排
'''
new_list = [] # 新建一个列表,存放排序后的元素,这样就不会修改传入的列表了
for x in iterable: # 遍历传入的列表
x = key(x) if key else x # 通过三元表达式来决定x的数据类型
for i,v in enumerate(new_list): # 获取new_list中的索引和元素
v = key(v) if key else v # 同样,如果传入了key就处理为key类型
com = x > v if reverse else x < v # 根据传入的reverse来决定升降
if com:
new_list.insert(i, x) # 这里插入的x还是没有改变类型的x
break # 只要break就不会执行else了
else: # 这样设置的目的是,第一次遍历new_lists时,new_list是空列表
new_list.append(x)
return new_list # 排序后返回新生成的有序的列表new_list
进行传参测试:
sort([3, 2, 6, 4, 1, 8, 5, 9, 7], key=int,reverse=True)#按照整数类型,降序排序
# out: [9, 8, 7, 6, 5, 4, 3, 2, 1] 排序完成
总结
我们尝试着自己去实现一个python已经给过的内建函数,看上去好像是没什么用,因为内建函数都可以直接拿来使用,但是在实现的过程中我们从构想,到思考如何入手,再到每一步的实施,这都使用了我们学过的各种知识以及细节,这就像解数学证明题一样,看似编出来了一段绝不会拿到生产线上的代码,但是实质上我们在有意无意的锻炼我们对待代码的态度以及各种手法,以后是否加班可能就是由我们的基本功来决定了,不能手高眼低,脚踏实地,勿忘初心!
python——自行实现sorted函数的更多相关文章
- Python中的sorted函数以及operator.itemgetter函数 【转载】
operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...
- Python中的sorted函数以及operator.itemgetter函数
operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...
- Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 排序算法 排序 ...
- Python中的sorted函数
今天在做一个中文文本分类的项目,遇到了一个sorted函数,发现并不会用... 记录一下: sorted(list, key, reverse) list是给定的列表: key是排序过程调用的函数,也 ...
- python sort和sorted函数
sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 ...
- python 中的高级函数sorted()
Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python几个排序函数 sort sorted argsort
Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...
- python 使用内置函数sorted对各种数据类型进行排序
python有两个内置的函数用于实现排序,一个是list.sort()函数,一个是sorted()函数. 区别1:list.sort()函数只能处理list类型数据的排序:sorted()则可以处理多 ...
随机推荐
- 用java求整数和
public class JavaAppArguments { /** * @param args */ public static void main(Str ...
- 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集
Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...
- 渗透测试-基于白名单执行payload--Regsvr32
复现亮神课程 基于白名单执行payload--Regsvr32 0x01 Regsvr32 Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令, ...
- socat的介绍与使用
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」.其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版. Socat 的主要特点就 ...
- OD 逆向工具常用快捷键
F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点. F8:单步步过.每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码. F ...
- 机器学习:weka中Evaluation类源码解析及输出AUC及交叉验证介绍
在机器学习分类结果的评估中,ROC曲线下的面积AOC是一个非常重要的指标.下面是调用weka类,输出AOC的源码: try { // 1.读入数据集 Instances data = new Inst ...
- caffe中softmax源码阅读
(1) softmax函数 (1) 其中,zj 是softmax层的bottom输入, f(zj)是softmax层的top输 ...
- div设置contenteditable 的小技巧
div设置contenteditable="true",即可编辑,除从网页粘贴过来内容的格式 <div contenteditable="true" id ...
- 盘点那些适配Linux的国产常用软件
前几天,10月24日,在这个程序员的节日里,腾讯时隔十一年,更新了QQ for Linux.瞬间,各大技术论坛,群聊,关于Linux的新QQ的话题不断.为什么QQ这么多年不更新QQ for Linux ...
- 三维动画形变算法(Mixed Finite Elements)
混合有限元方法通入引入辅助变量后可以将高阶微分问题变成一系列低阶微分问题的组合.在三维网格形变问题中,我们考虑如下泛函极值问题: 其中u: Ω0 → R3是变形体的空间坐标,上述泛函极值问题对应的欧拉 ...