仿照内建函数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函数的更多相关文章

  1. Python中的sorted函数以及operator.itemgetter函数 【转载】

    operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...

  2. Python中的sorted函数以及operator.itemgetter函数

    operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...

  3. Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 排序算法 排序 ...

  4. Python中的sorted函数

    今天在做一个中文文本分类的项目,遇到了一个sorted函数,发现并不会用... 记录一下: sorted(list, key, reverse) list是给定的列表: key是排序过程调用的函数,也 ...

  5. python sort和sorted函数

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

  6. python 中的高级函数sorted()

    Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...

  7. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  8. python几个排序函数 sort sorted argsort

    Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...

  9. python 使用内置函数sorted对各种数据类型进行排序

    python有两个内置的函数用于实现排序,一个是list.sort()函数,一个是sorted()函数. 区别1:list.sort()函数只能处理list类型数据的排序:sorted()则可以处理多 ...

随机推荐

  1. nrm的安装与使用

    nrm的作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址:,我们依旧使用的事npm的命令,只是镜像地址变了 什么是镜像:原来包刚一开始是只存在于国外的NPM服务器, ...

  2. python编程基础之三十三

    构造方法: 目的:构造方法用于初始化对象,可以在构造方法中添加成员属性 触发时机:实例化对象的时候自动调用 参数:第一个参数必须是self,其它参数根据需要自己定义 返回值:不返回值,或者说返回Non ...

  3. Python接口测试框架实战与自动化进阶☝☝☝

    Python接口测试框架实战与自动化进阶☝☝☝  一.fiddler在工作中的运用  1.如何抓接口 抓紧手机端接口 ①.在电脑终端输入:ipconfig ,找到电脑ip ②.打开手机,连接WiFi, ...

  4. 自学web前端达到什么水平,才能满足求职的标准?

    大多数野生程序员最棘手的问题就是如何依靠技术解决温饱,通俗来讲就是技术折现的问题. 如果是单纯出于兴趣,或者只是为了突击某一阶段或者某一项目技术壁垒,不跟就业挂钩的自学倒也是无关痛痒.但是当上岗成为自 ...

  5. ‎Cocos2d-x 学习笔记(26) 从源码学习 DrawCall 的降低方法

    [Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/cocos2dx-drawcall-glcalls 1. 屏幕左下角 我们通常在Cocos ...

  6. Mqtt-Client

    客户端选择:paho MQTT client. 使用vs2013编译成库 需要用到paho-mqtt3a库和paho-mqtt3c库.

  7. docker实验--redis集群搭建

    背景介绍: 我经常在做一些小项目的时候,采用了Redis来做缓存,但是都是基于单节点的,一旦redis挂了,整个项目就挂了.于是乎,想到了多节点集群的方式来使用,就开始折腾着怎么去搭建这个集群.在网上 ...

  8. Enum枚举学习- java5之前和之后的写法

    enum枚举 JDK1.5以前枚举的写法 /** * java5.0以前,定义枚举类.类中的对象是有限的 * @author amber * */ public class Season { priv ...

  9. MyBatis(4)-- 动态SQL

    如果使用JDBC或者类似于Hibernate的其他框架,很多时候要根据需要去拼装SQL,这是一个麻烦的事情.因为某些查询需要许多条件.通常使用其他框架需要大量的Java代码进行判断,可读性比较差,而M ...

  10. Mysql数据库(四)表记录的更新操作

    一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...