00:00
我们回家上节课内容啊,上节课呢,我们区分了三个东西是什么呢?方法,函数跟参数,方法和函数都是可以调用的,区别呀,就是方法是属于类的对象,而函数直接调用的,那么这两个东西都有参数,参数是什么呢?参数就是传导方法和函数里的一些能用的东西,比如说reverse你传进去,那就就翻转,Key你传进去它就排序方法。那这次我们看点什么呢?定一个number list数值列表,然后呢,得到一个list,它的范围是从0开始到10结束,不长为3 NL是什么呢?0369,如果我给它啊pen的一个5发生什么呢?NL把5追加到了最后,那么我想怎么样呢?把它排个序啊,排个序之后NL就怎么样,就直接放到这个列表里了。我需要先追加再排序,非常麻烦,希望怎么样直接插入,有没有这方法呢?问问AIAI说有啊,有这么一个叫音色的方法,我们试试NL tab找到INS sir对他喊救命,喊完救命之后出现在索引之前插入对象。
01:17
有一个东西是索引,还有一个是对象,也就是说在索引之前插入这个对象,首先我们知道插什么对象重新给它。生命并赋值回到这个原始状态了,然后呢,我应该insert了。Insert首先是插索引,索引是多少呢?现在不知道。但是我可以通过index去去找到,找到找到谁了呢?找到6的索引,6索引是2,所以这个时候我可以插入了,我在2之前插入5这个数值,谁知2012,也就是在这个6之前插入5这个对象,那这个时候我是不是就直接完成了插入这个事儿就完成了,那么插入完成之后它依然有序,而且就不用排序了,现在插入这块学了三个东西是什么呢?Insert append和extend。
02:15
End呢,就是在末尾追加INS色的呢,就是在索引位置差ex extend呢,是将这个呃,可遍历的东西逐个添加到结尾。有什么区别呢?我们动手试一试哈,先来个list吧,列表等于什么呢?等于一个范围里边的列表,它是0~9对吧,我们可以让它啊pen的一个A先看看,追加就是在末尾追加这个东西。那我还可以插入吗?我要插入2.5,我要在什么位置插入2.5呢?0123,我要在3之前插入2.5,在2和3之间就插入了2.5啊,成功,然后呢,Extend extend破裂。
03:07
拓拓的是什么呀?就来个10逗号,11行不行呢?我们可以看到10和11这两个。列表项作为新的列表项被。扩到这个原列表里边了,那如果我直接追加呢,啊,Pen的这个东西呢,啊pen的这个东西它就是。把这个列表作为它的这个整体元素放到这儿是吧?哎,那如果说我要在这个位置把这个放进去会怎么样,那就什么,那就是。Upend的就不是upend的了,就是in色的在9后边,那就是10的位置。放一个什么呢?放一个列表,那这个时候它就是这么一个过程,哎,这这这这这个位置有问题啊,这个位置有问题,那我怎么办呢?我还得先删除掉它,Remove remove谁啊,把这个10逗号11删除掉LSE,我们可以看到这个东西被删除了,然后这个东西还被保留着,这个东西还被保留着,我具体找位置啊,零一二三四五六七八九十十一,我应该在11后边查是吧?好,这个时候LST呢。
04:31
就是在11后边插入了列表。这个东西就是插入的使用方法,那这个插入我可以利用插入来排序吗?呃,这插入插入排序排序,什么是插入排序呢?首先就得明确插入排序是一种排序方法,具体来说呢,就这有一把牌乱的,我们可以建一个新列表,建新列表之后怎么着呢?哎,我往这个新列表里头放牌,每一次都插入一张牌,但是插入有要求,每次插入都按照顺序插入。
05:06
那这个时候旧列表一张一张少,新列表一张一张加,完成之后新列表就排好序了,是吧?我们这个list的so,它用的就是这个插入排序,可以看到吗?可以看到这块儿有这么一个链接,是连到githarb,用C语言写的Python的解释器的原文件,我们搜什么呢?搜Sortt函数,我们找到这块有个binary sort里面用的是什么呢?二进制的插入排序。那具体来说呢,又有二进制,又有插入排序二进制怎么理解呢?我们可以看到这儿有这么一棵树,这是一棵二叉树,每个节点都有两个叉,所以叫二叉树。Binary search, 那么找其中的位置的时候,首先我是对半儿匹。竖着这么一刀切到,因为原来是排好序的,我从中间一劈之后呢,左边比他小的,右边比他大的,我我跟他一比之后比他大又往右边找,右边找之后再把后半段再一匹,哎。
06:12
左边比他小,右边比他大,劈了之后呢,哎,就往左边找,然后呢,再在这块儿再一劈,他不断的劈劈劈都是二分法,二叉树嘛,不断的二分法,最终形成这么一个二叉树,通过二叉树就可以找到相应的位置,做新列表的时候呢,也是这种二分法的查找,所以呢,我们每次找这个位置的时候,是以2为底的这么一个N的对数。总共呢,有N个位置,所以外层循环是N,里层循环呢是以2为底,N的对数,哎,这就是什么大O表示法对应不同的时间复杂度,呃,Team sort, 这team sort是谁写的呢?大找到它的history列表类的C语言的原文件到底是怎么写的呢?我们可以看到它有若干个历史记录,最近一次6月13号,今天11月13号往前翻呢,每一次都是一次提交,2022年列表类作为这么一个特别常用的类,它还是不断在提交的,也是不断的演化成今天这个状态。
07:20
它的源代码始终是开放的,这就是一种开源文化。还有各种各样的人都在对列表类进行修改,但是最终决策是谁来决策呢?是那个仁慈的独裁者GLE,对吧,GLE.等对它去进行一些修改。2000年以前已经有互联网了,人们把这个邮件呢发给gridle,然后griidle再把这个东西写到拍ython原文件里面,我们可以看到这儿有这个gridle写的team's latest with some my change also TP selection I added, 哎,非常明确的啊,贡献的指明了team,那这个时候应该也是使用git了,但是还没有giit HUB, 黑豆把这个代码呢,通过邮件获得,整合好之后做一个提交,是这么一个流程,Riddle是一个非常伟大的程序员,但是在排序这块儿team还是很厉害的,Team呢,是从这个时间点就是开始写这个quick thoughtt回忆回忆那个时间点,Griid斗还在荷兰孤军奋战是吧?最开始写的是啥样呢?当时的这个提交函数还曾经一度被命名,叫什么呢?Team sort可以看到gridle对team的认可和推举,也可以看到team对这个Python这个团队的贡献。当时。
08:40
那就是使用蛇形命名啊。然后包括一些代码规范去呢,非常简单,我们可以快速的在列表当中找到相应的列表项,就像找到一张牌一样。呃,那么怎么样形成这种排序呢?假如我在新抓一张牌呢,我可以放到指定位置,这就是什么?这就是插入排序是吧?我抓住一张9,我就放在10前面,我扎住这张勾呢,我就放在这个10后边,那这样的好处呢,就是扔保持这个列表仍然有序,仍然好找,所以排序和插入这两个东西啊,怎么样相辅相成哎。
09:15
这次呢,我们了解了定点插入音色的。相对于原来呢,追加啊pen的是有区别的,那排好序之后呢,想保持依然有序就需要定点插入,定点插入那可以定点删除吗?我们下次再说哦EZ交枪。
我来说两句