学习网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 130866|回复: 0
收起左侧

高级语言程序设计(Python) - 哈尔滨工业大学-6.1.2 视频2

[复制链接]
发表于 1-25 20:22 | 显示全部楼层 |阅读模式
下面我们再来看一下列表赋值的概念我们假设有以下的这些代码那么这些代码最终执行的结果会是什么呢首先我们将a赋值成列表1234然后再加a呢赋值给b接着将b的第二个元素也就是b1改成100然后呢我们打印a1当然说这是a1最终的结果到底是二还是100呢其实啊a1最终打印的结果会是100为什么会这样呢因为将a赋值给b的时候啊其实并没有生成一个新的列表而是b呢也指向a的这个列表紧接着对b一进行复制100的话其实就将这个列表中的第一号元素改成了100也就是相当于对a的第一个元素也改成了100那么打印a1的话结果就应该是100那如果改一下这个程序不是将a直接赋值给b而是将a方括号冒号用这种方法呢其实相当于生成了一个新的列表然后将新的列表赋值给b那过程就是这样生成了一个新的列表将新的列表赋值给b紧接着在对这个新的列表的第一号元素赋值成100那其实他不会影响旧的这个列表那么打印就这边的第一号元素他仍然1当然这个操作的过程我们可以用下面的一个链接动态来演示一下程序就是这个样子我们可以动态在演示一下好点击下一步我们看到生成了一个新的列表叫做1234a呢这个变量是指向着这个新的列表紧接着在执行下一步我们叫a直接复制给b那么也就是说b这个变量呢指向a原来的这个列表接着将b的第一号元素赋值给100那么就是同一个列表它的内容进行了修改接着呢再打印一下那打印的结果就是100那我们重新再改一下这个程序在赋值的时候不是将a复制给b而是将a方括号冒号就是生成一个新的列表它的内容和原来列表是一样的赋值给b这时候在执行一下这个程序好点击下一步生成一个新的列表那么再点击下一步我们看到b呢并不是指向a的原来这个列表而是生成了一个新的列表在下一步的话是在这个新的列表中的第一个元素被改成了100就的列表内容并没有进行修改然后在打印的话那么打印结果仍然是二好那知道了列表赋值的这种操作之后我们可以看一下列表作为函数的参数是如何来进行传递比如说我们想写一个函数用它来交换列表中的两个元素的内容我们都知道如果我们要想写一个函数叫做swap他呢是两个变量分别是ab那么如果要是在列表中对ab进行交换的话就使用如下这些代码那如果要是原来的x是10y是20要想调用swap把这个函数交换x和y大家可以猜一下最终打印的结果到底是十二十还是交换之后的20十呢同学们可以上机实际的来操作一下最终打印的结果就是十二十也就是并没有完成交换这个功能那么我们假设又有一个新的函数叫做swap它的参数呢是一个列表而另外这两个参数就是我们要交换的这两个元素的下标然后在函数内部我们生成一个变量tmp他呢指向这个下标为a的这个元素接着再将下标为a的元素置为下标为b的元素内容然后再将元素这个b呢赋值成tmp接下来我们可以看一下他是否真正的实现交换这个功能那列表呢它的元素分别是十二十三十我们想交换第零号元素和第一号元素也就是十和20那么最终打印的结果到底是十二十三十还是二十十三十呢我们也可以用刚才那个网站来看一下首先第一步我们可以看到在内存里面生成了一个函数叫做swap吧他呢有3个参数分别是一个列表然后呢是要交换的这两个元素的下标紧接着再执行一步就生成了一个新的列表叫做十二十三十用变量x来指向这个新的列表再下一步就会调用这个函数要用函数的过程我们可以看到list的这个参数就指向了原来的这个列表而a和b这两个形参的值呢就被分别赋值成了实参的值也就是分别是零和1再执行一步看到生成了一个变量tmp内容呢就是十就是list0它的内容紧接着我们可以看到将lista也就是list零赋值成list一也就是将零号元素它的内容呢制成了一号元素内容也就是变成了20那么再执行下一步的话将tmp原来的十呢在置给一号元素就是变成了二十十三十在下一步随着函数的结束所有的刚才生成的临时变量就是包括那些形参值呢都没有了但是呢x原来的这个列表就变成了二十十三十接着打印x的话打印的结果呢就变成了二十十三十也就是实现了20和10这两个元素的交换接下来我们再看一个例子叫做列表的查找所谓在列表查找就是在列表中查找一个给定的值并且返回这个值第一次出现的位置如果这个值不存在那么就返回-1那这个函数可以写成这个样子我们定义函数search有两个参数第一个是这个列表第二个呢是我们要查找的值叫做x下面我们就可以对列表进行循环了for i in range(len(lst))恰好生成了这个列表的长度那么range这个长度呢就是生成012一直到这个长度减一恰好就是这个列表中的每一个元素的下标if lst[i]如果等于x这时候我们可以return i也就是这个元素呢第一次出现他的下标如果所有的循环都结束了仍然没有return就说明我们要找的是元素x并没有在列表中这时候要return-1下面呢我们假设生成一个列表lst它的值呢是十,五,八,13接着呢我们可以调一下这个search在lst中假设我们想查找八好最终将结果print出来我们都知道八呢是第二号元素那我们希望打印的结果就应该是二看一下实际的执行结果看一下实际结果呢确实是二如果要查找元素不是八而是七那么知道七并没有在列表中我们希望输出的结果应该是-1看一下打印结果呢恰好就是负一除了自己可以实现这种查找的过程之外呢其实在lst中也提供了一个叫做index此方法这个方法和上面的函数是一样的也就是返回一个列表中要查找元素的下标比如如果要是列表是122那么index(2)的话也就是查找二这个元素他的下标当然我们看到这里面有两个二那这个方法呢仍然是返回第一次出现的这个元素它的下标也就是一而我们实际的可以来操作一下不用search的而是lstindex应该是结果呢仍然是八我们看一下最终结果是二也就是八这个元素它的下标值那么如果要查找元素仍然是七你知道七不在这个列表里面那么返回结果是-1吗我们可以看到这个程序啊其实抛出了异常那么index方法就是如果要查找的这个元素不在列表中他就会抛出一个异常当然无论是index还是我们要实现的search最坏的运行时间就是k0n加上k1比如我们要查找这个元素并没有在列表中但是呢我们仍然需要比较n次所以说需要k0乘以n这么长的时间k0呢就是每一次比较所需要的时间再加上k1k1的话就是一个很小的长处它不随着n的变化而变化比如说这个函数调用和返回所需要的一些时间还是一个小的常数时间我们管这种查找的方法呢叫做线性查找[此为课程内容大纲,相关资源下载地址请在论坛搜索标题名称]

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|学习资源网 ( 粤ICP备16100991号-2 )

GMT+8, 12-5 07:22 , Processed in 0.171025 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc. Template By ¡¾Î´À´¿Æ¼¼¡¿¡¾ www.wekei.cn ¡¿

快速回复 返回顶部 返回列表