当前位置: 首页 > news >正文

python中如何将两个列表进行合并_Python中如何把两个list合并,并按从小到大顺序排列?...

本题分为两个部分:一个是list的合并,一个是用while loop循环将合并后的数组从小到大进行排序——排序问题。

1. List的合并:

list的合并其实非常简单,只需要用“+”号对两个数组进行相加,另一个数组就会被加到前一个数组的末端,如代码:

list1 = [7,3,10,12,5,1,2]

list2 = [4,6,11]

list3 = list1 + list2

print(list3)

最后输出的结果就会是:

简单相加,即可轻松完成两个列表的合并。

2.While loop的冒泡排序法:

本题其实最大的难点在于此,与普通的题目不同的是,本题题主所要求的排序,必须要使用While loop循环。

用来排序的算法有很多:冒泡排序、选择排序、插入排序等。

在这里我们选择了新手最常掌握的冒泡排序法:

冒泡排序法又叫交换排序法,每次会将相邻的两个数进行比较,如果这两个数不符合比较条件,则将其位置进行交换。

举个例子:

3,4,2,1 四个数

算法先将3、4进行比较,3<4,满足,则不动。

再将4、2进行比较,4不小于2,不满足,则4、2位置交换。

此时变成了 3,2,4,1

于是再比较4、1,4不小于1,不满足,4、1位置交换。

得到:3、2、1、4

可见在这一次的比较中,最大的一个数被排到了最后,一共有4个数字,则我们一共需要3次比较:3、2、1、4

2、1、3、4

1、2、3、4

这就是冒泡排序法的原理:

每一次排序,根据你所设置的条件,将最大或最小的一个数归位,如上文例子所示,若有n个数,则需进行n-1次排序归位。

冒泡排序法通常是一种升序算法,你可以看到,最大的一个数,像气泡一样,慢慢从水底冒出水面,因此得名「冒泡排序法」

掌握了冒泡排序法的原理,要写出代码就不难了。

首先是它的核心部分——交换:

if list3[i] > list3[i+1]:

a = list3[i]

list3[i] = list3[i+1]

list3[i+1] = a

首先我们判断该数list3[i]与后一个数list3[i+1]的大小,若该数list3[i]大于后一个数list3[i+1],则开始进行交换:我们需要先将该数list3[i]的值赋给一个新的变量,以保留原有的值。

2. 再将list3[i+1]的值赋给list3[i],此时的list3[i]便成了小的数字。

3. 然后把原有的数值(较大数),赋给list3[i+1],交换便完成了。

接着便是这一趟的循环比较部分,按题主要求使用While循环:

i = 0

while i < len(list3)-1:

if list3[i] > list3[i+1]:

a = list3[i]

list3[i] = list3[i+1]

list3[i+1] = a

i += 1

于是在这,我们为刚刚上方的交换代码套上了一层循环。

可以看到,我们声明了一个为0的i变量,用于限制循环的次数,因为有n个数,我们只需要进行n-1次比较就够了4个数,3次比较

因此此处写的是i < len(list3)-1:

而到这里,我们其实只完成了一趟比较,把当前最大的一个数排到了最后,因此我们还需要再进行几次比较。

多趟循环比较:

j = 0

while j < len(list3)-1:

i = 0

while i < len(list3)-(j+1):

if list3[i] > list3[i+1]:

a = list3[i]

list3[i] = list3[i+1]

list3[i+1] = a

i += 1

j += 1

完整的冒泡排序算法便是如上代码。除了i以外,我们还声明了一个j,同样也是用来限制循环次数,原理也是一样的,共有n个代码,则需比较n-1趟。

而除了多套了一个循环外,内部单趟比较的代码也有了改变,注意看第四行:while i < len(list3)-(j+1):

在单趟比较的时候,我们用的还只是 len(list3)-1,而它变成 len(list3)-(j+1)是因为,上一趟已经将最大的数排到了最后,因此当轮到最后两个数进行比较的时候,我们便无需再比了,减少比较的次数,提高程序的效率。

观察运行过程:

代码主体已经完成,但为了加深对算法的理解,我们在这里使用极客战记内的say()输出语句(等同于print()语句),观察一下代码的运行过程。

首先是合并部分:

看看最后输出的结果:

接下来是排序部分:

我们在极客战记内随机定义两个List,在每次循环开始时,加入了一段hero.say()的输出语句,输出目前正常执行的操作。

代码如下:

在第一层循环前加一个输出,看看现在是第几趟排序

在第二层循环的开始加一个输出,看看目前是第几次排序,并查看排序的结果。

输出结果如图:

可以从图中发现,每一次循环,都将最大的数12往后挪了一次,还可看见其中第三第四次排序没有比较出结果,因此没有任何输出,利用在代码中插入输出语句,代码的运行过程清晰可见,更有助于理解算法以及修改代码。

关于代码调试,我们也有一篇文章专门讲解了新手常用的代码调试方法:极客战记:学编程,最重要的是要学会修代码——代码调试小技巧。​zhuanlan.zhihu.comv2-4d5eb30d4365c017cf2c134673d544a1_180x120.jpg

因此,题主所需的完整代码如下:

list1 = [7,3,10,12,5,1,2] ##随机定义了两个列表

list2 = [4,6,11]

list3 = list1 + list2 ##列表的合并

j = 0

while j < len(list3)-1:

i = 0

while i < len(list3)-(j+1):

if list3[i] > list3[i+1]:

a = list3[i]

list3[i] = list3[i+1]

list3[i+1] = a

i += 1

j += 1

print(list3)

当然,这个问题已经有一年多了,我想题主的作业应该早就已经完成了……那就希望本答案能够帮到有需要的同学啦~

我们还有一篇回答对While loop循环以及循环的控制进行了详细的解析,如果有所需要,请点击下方链接:Python 中当一个while循环判断为false结束这个循环的时候,怎么进入到下一个循环中?​www.zhihu.comv2-9e24a597ffe65f49b04e685c60576728_ipico.jpg

如果觉得以上回答有一定帮助的话,麻烦动动小手点一下左下角的赞~,我们也将长期发布种种编程相关内容,有兴趣的话也可以点点右上角的关注按钮,谢谢~

相关文章:

  • ctf xss利用_从xss挑战之旅来重读xss(一)
  • python考研参考书目_Python自学日记28——如何选择学习资料
  • 无法应用转换程序_电脑硬盘无法安装应用程序怎么办?
  • educoder实训平台python入门之运算符的使用_Python入门教程-运算符
  • docker rabbitmq_docker快速部署rabbitmq多机集群
  • python程序设计学生的自我总结_《Python程序设计》学生答疑【20200227】
  • ssl 接收到一个超出最大准许长度的记录_从零编写一个自己的蜜罐系统
  • pythondocumentation_python官方文档
  • python怎么突然这么火_为什么python突然变得这么火了?
  • gdb 条件断点_蜂鸟E203系列——Linux调试(GDB+Openocd)
  • gif分解工具_搞笑 GIF 制作工具
  • python123第四周_百度杯十月第四周WriteUp
  • 数据窗口动态生成列_2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇...
  • using在sql中是什么意思_粤语为什么那么难学?原来我们都弄错了
  • python123可以复制粘贴吗_python 复制与粘贴处理笔记
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • canvas绘制圆角头像
  • co.js - 让异步代码同步化
  • gcc介绍及安装
  • Laravel Telescope:优雅的应用调试工具
  • Nacos系列:Nacos的Java SDK使用
  • overflow: hidden IE7无效
  • Webpack入门之遇到的那些坑,系列示例Demo
  • win10下安装mysql5.7
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 对象引论
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端
  • 数据科学 第 3 章 11 字符串处理
  • 微信小程序:实现悬浮返回和分享按钮
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • ​​​​​​​​​​​​​​Γ函数
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # Panda3d 碰撞检测系统介绍
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (二十四)Flask之flask-session组件
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (汇总)os模块以及shutil模块对文件的操作
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (区间dp) (经典例题) 石子合并
  • (十八)SpringBoot之发送QQ邮件
  • (四)Android布局类型(线性布局LinearLayout)
  • (一) springboot详细介绍
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (译)计算距离、方位和更多经纬度之间的点
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .apk 成为历史!
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 项目如何优雅地设置条件编译符号?