python 多个列表合并_Python对两个有序列表进行合并和排序的例子

Python对两个有序列表进行合并和排序的例子

这篇文章主要介绍了Python对两个有序列表进行合并和排序的例子,最终代码经过不断优化,小编非常满意,需要的朋友可以参考下

假设有2个有序列表l1、l2,如何效率比较高的将2个list合并并保持有序状态,这里默认排序是正序。

思路是比较简单的,无非是依次比较l1和l2头部第一个元素,将比较小的放在一个新的列表中,以此类推,直到所有的元素都被放到新的列表中。

考虑2个列表l1 = [2], l2 = [1],如何将他们合并呢?(注意:下面实现会改变l1和l2本来的值)

代码如下:

def signle_merge_sort(l1, l2):

tmp = []

if l1[0] < l2[0]:

tmp.append(l1[0])

tmp.extend(l2)

del l2[0]

else:

tmp.append(l2[0])

tmp.extend(l1)

del l1[0]

return tmp

这真的只能处理一个元素的情形,还不能解决问题,不过好歹我们有一个大概的思路了。如果有列表中2个元素,上面的方法就不行了。我们需要解决边界判断问题,即当l1或者l2有一个为空的时,将剩下的一个list加到排序结果的尾部。然后确保函数每次调用只处理一个元素,通过递归来解决问题。

代码如下:

def recursion_merge_sort1(l1, l2):

tmp = []

if len(l1) == 0:

tmp.extend(l2)

return tmp

elif len(l2) == 0:

tmp.extend(l1)

return tmp

else:

if l1[0] < l2[0]:

tmp.append(l1[0])

del l1[0]

else:

tmp.append(l2[0])

del l2[0]

tmp += recursion_merge_sort1(l1, l2)

return tmp

上面的程序有2个问题:if判断太多;每次都要初始化tmp,对内存使用似乎不太友好。考虑到程序在l1或者l2有一个为空的时候就终止,可以稍微改写一下:

代码如下:

def _recursion_merge_sort2(l1, l2, tmp):

if len(l1) == 0 or len(l2) == 0:

tmp.extend(l1)

tmp.extend(l2)

return tmp

else:

if l1[0] < l2[0]:

tmp.append(l1[0])

del l1[0]

else:

tmp.append(l2[0])

del l2[0]

return _recursion_merge_sort2(l1, l2, tmp)

def recursion_merge_sort2(l1, l2):

return _recursion_merge_sort2(l1, l2, [])

但是对于Python而言,即使是尾递归,效率也不是那么高,为了避免爆栈,通常还是会用循环来做,再稍微改写一下:

代码如下:

def loop_merge_sort(l1, l2):

tmp = []

while len(l1) > 0 and len(l2) > 0:

if l1[0] < l2[0]:

tmp.append(l1[0])

del l1[0]

else:

tmp.append(l2[0])

del l2[0]

tmp.extend(l1)

tmp.extend(l2)

return tmp

今天栽了个坑,好好反省,就是这样。

完 谢谢观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动之后自己关闭_电脑一开都是广告,请问怎么永久关闭?

电脑一开机&#xff0c;主屏广告、右下角弹窗广告蹭蹭蹭的弹个不停&#xff0c;相信很多人都有这样的困扰&#xff0c;尤其是在公共电脑上&#xff0c;广告多的要命。你是否有这样的经历&#xff0c;上学的时候&#xff0c;教室前面的用来讲课的电脑&#xff0c;在老师用PPT授课…

中等职业计算机等级考试,中等职业学校计算机等级考试题库(含答案):EXCEL

中等职业学校计算机等级考试题库(含答案)三 EXCEL20031某工作簿已设置了"打开"与"修改"两种密码&#xff0c;如果只知道其"打开"密码&#xff0c;那么______。A可打开该工作簿&#xff0c;也可以修改&#xff0c;但是不能在原文件夹下用原文件名…

python在统计专业的应用_Python统计学一数据的概括性度量详解

一、数据的概括性度量 1、统计学概括&#xff1a; 统计学是应用数学的一个分支&#xff0c;主要通过利用概率论建立数学模型&#xff0c;收集所观察系统的数据&#xff0c;进行量化的分析、总结&#xff0c;并进而进行推断和预测&#xff0c;为相关决策提供依据和参考。统计学主…

5错误怎么办_“选择不对,一生白费”:如果选错了,该怎么办?记住这两句话...

上帝把1、2、3、4、5、6、7、8、9、0十个数字摆出来&#xff0c;让面前10个人去取&#xff0c;并说道&#xff1a;“一人只能取一个。”人们争先恐后地拥上去&#xff0c;把9、8、7、6、5、4、3都抢走了。取到2和1的人&#xff0c;都说自己运气不好&#xff0c;得到的很少很少。…

北京大学灵异事件计算机房,北大 清华高校 发生的真实恐怖灵异事件

北京大学我有一高中同学b&#xff0c;大学在交大上的&#xff0c;有段时间没联系了&#xff0c;偶然的机会在街上遇到他&#xff0c;当时我被他吓了一跳&#xff0c;只见他脸色发青&#xff0c;眼窝深陷&#xff0c;一问之下&#xff0c;他神情紧张地告诉我&#xff1a;他遇到鬼…

python中 是什么运算符_Python 运算符

Python 运算符 什么是运算符&#xff1f; 本章节主要说明Python的运算符。举个简单的例子4 5 9。 例子中&#xff0c;4和5被称为操作数&#xff0c;""号为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较&#xff08;关系&#xff09;运算符 赋值运算符 …

下取整函数的含义_Excel数值取整的7种方式

原标题&#xff1a;Excel数值取整的7种方式上期帮主原创&#xff1a;《高手会这样制作图表~》(在Excel数据处理过程中&#xff0c;数值取整比较常见&#xff0c;且针对不同的要求我们需要采用不同的取整函数来解决。那今天帮主就和大家分享数值取整的7种方式&#xff0c;大家收…

软件测试面试选择判断提,软件测试面试常考判断题

1.软件测试的目的是尽可能多的找出软件的缺陷。( Y)2.负载测试是验证要检验的系统的能力最高能达到什么程度。(N )3.测试人员要坚持原则&#xff0c;缺陷未修复完坚决不予通过。(N)4.自动化测试能比手工测试发现更多的缺陷(N)5. 错误猜测法基于这样一种假设&#xff0c;以前犯过…

python苹果电脑如何下载_python for Mac|python Mac版V2.7.10下载(暂未上线)_预约_飞翔下载...

pythonfor mac是一种即译式的&#xff0c;互动的&#xff0c;面向对象的编程语言&#xff0c;它包含了模组式的操作&#xff0c;异常处理&#xff0c;动态资料形态&#xff0c;十分高层次的动态资料结构&#xff0c;以及类别的使用。如果因为网络原因&#xff0c;去 Python 官网…

idea pom依赖失败_IDEA中Maven依赖下载失败的完美解决方案

使用IDEA进行Maven项目开发时&#xff0c;时不时会遇到pom.xml报错的情况&#xff0c;其中很大概率是因为Maven依赖的jar包下载失败&#xff0c;找来找去也没有找到是什么问题&#xff0c;困扰了很多程序猿&#xff0c;这里给出IDEA中Maven依赖下载失败解决方案&#xff0c;给大…

南京师范大学874计算机答案,2017年南京师范大学电气与自动化工程学院874电路考研题库...

一、计算题1&#xff0e; 计算如图所示电路的输入电阻图【答案】在端口间加电压在该作用下产生电流则解方程得则输入电阻为2&#xff0e; 列写图(a )所示电路矩阵形式的节点方程(用相量)。图【答案】该电路的有向图如图(b )所示。故可写出节点——支路关联矩阵A 和支路阻抗矩阵…

mysql 设置字段自动增长值_mysql命令行脚本

命令行连接在工作中主要使用命令操作方式&#xff0c;要求熟练编写打开终端&#xff0c;运行命令mysql -uroot -p回车后输入密码&#xff0c;当前设置的密码为mysql连接成功后如下图退出登录quit 和 exit或ctrld登录成功后&#xff0c;输入如下命令查看效果查看版本&#xff1a…

ie8不发送ajax,IE8用ajax访问不能每次都刷新的问题

AJAX简介AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并更新部分网页的艺术&#xff0c;在不重新加载整个页面的情况下。IE8用ajax访问不能每次都刷新的问题介…

graphic方法重写 unity_Unity Shader 深度值重建世界坐标

根据深度重建世界坐标证明世界坐标重建正确的方法首先&#xff0c;得先找到一种证明反推回世界空间位置正确的方法。这里&#xff0c;我在相机前摆放几个物体&#xff0c;尽量使之在世界坐标下的位置小于1&#xff0c;方便判定颜色如下图&#xff1a;然后将几个物体的shader换成…

python显示表格_在Python中获取Excel表格的数量

How get number of sheet in below python example? file self.excel_file.decode(base64) excel_fileobj TemporaryFile(wb) excel_fileobj.write(file) excel_fileobj.seek(0) workbook openpyxl.load_workbook(excel_fileobj, data_onlyTrue) sheet_number ??? sheet…

asp网站本地测试服务器,小旋风asp服务器,asp本地环境调试必备

学习asp&#xff0c;要在本地搭建一个asp服务器调试环境吧&#xff0c;那么必不可少的要找asp本地调试环境软件&#xff0c;超级小旋风AspWebServer是一个不错的选择。超级小旋风AspWebServer系统基于NetBox开发&#xff0c;可以跟IIS媲美的服务器。小旋风asp服务器 该软件是由…

基于sklearn的朴素贝叶斯_Sklearn参数详解—贝叶斯

在开始学习具体的贝叶斯参数前&#xff0c;你可以先看看&#xff1a;朴素贝叶斯详解​mp.weixin.qq.com朴素贝叶斯一共有三种方法&#xff0c;分别是高斯朴素贝叶斯、多项式分布贝叶斯、伯努利朴素贝叶斯&#xff0c;在介绍不同方法的具体参数前&#xff0c;我们先看看这三种方…

快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)

OpenCV-Python系列之傅里叶变换 傅里叶变换 我们生活在时间的世界中&#xff0c;早上7:00起来吃早饭&#xff0c;8:00去挤地铁&#xff0c;9:00开始上班。。。以时间为参照就是时域分析。 但是在频域中一切都是静止的&#xff01;可能有些人无法理解&#xff0c;我建议大家看看…

c# 服务器性能监控,C#服务器性能监控之WMI的代码示例详解

1.WMI简介WMI是英文Windows Management Instrumentation的简写&#xff0c;通过使用WMI&#xff0c;我们可以获取本地或远程服务器的性能参数和进程运行情况&#xff0c;以及大部分硬件信息&#xff0c;但前提是运行的用户要有足够的权限&#xff0c;如administrator组用户等。…

pythonrandrange_Python3 randrange() 函数

Python3 randrange() 函数 描述 randrange() 方法返回指定递增基数集合中的一个随机数&#xff0c;基数缺省值为1。 语法 以下是 randrange() 方法的语法:import random random.randrange ([start,] stop [,step]) 注意&#xff1a;randrange()是不能直接访问的&#xff0c;需要…