00:00
好,我们回忆一下上节课内容啊,上一节课把一首歌分成了乐段,乐段里面有乐剧,粤剧里面有音符,一层一层的,在不同的维度上对它进行随机,就会有不同的效果。这个数字可以表示音高,但是更重要的是它所在的结构,有了这个结构就可以随机,那它可以排序吗?我们来看一下排序。先看看传统排序是什么样的,5个数字的列表。我们去洗牌,把列表洗一把,洗一把之后呢,它就乱了,乱了之后我再去排序,排序之后呢,还有有了次序了,这就是传统排序,一维列表的排序,那二维列表能排序吗?弄个二维列表。那里面有一个东西是一列表里的列表,第一个是1,第二个是0,原始列表是这样的,排序之后的列表是这样的,原来1在前面,0在后边,现在呢,0在前面,1在后边。
01:01
哎,那它是怎么排的呢?那它肯定就有一个排的方法是吧,我们得找一下这个多维列表的排序,刚才点开了之后,它是有一个sequence compare.Like graphically.这什么意思呢?我们来看一下。首先是sequence序列。列表其实就算是一个序列,比如说列表、range和元组,他们都属于sequence sequence怎么来的呢?是Second second second什么意思?Second意思是一秒钟,又是第二。第二和一秒有什么区别呢?一秒之后是第二秒,第二秒之后又是下一秒,一秒,一秒又一秒,Second second second就是下一个的感觉,所以这一一溜的秒就构成了一个秒的序列,Sequence.Graphic, 按字典序的sequence compare graphically.
02:02
列表的比较按字典序的进行。Using comparison of corresponding element依次对比两者对应位置的元素。那什么是对应位置的元素?我们Q出来观察一下,有这样一个列表,比如说1和1。它们相等吗?它小于吗?不小于,但它等于吗?它等于是吧?它不小于就得看它后面的,比如说它不光一个了。他现在是这样的,第0个位置一比,比不出来大小,那比第一个位置,比第一个位置确实是处是吧,就是处后边即使你这个是1,这个是0,那也不受影响,他挨牌比,比到这儿出结果了,后边就直接短路了,不看了,但如果说你在这儿比,又没比出结果,那就怎么样,那就按照后边的来比是吧,按照后边的这叫什么?这叫sequence comparison likeical graphically using comparison of corresponding element, 什么结构都能排序吗?也不一定,比如说LSE,这回我让他是一个新的结构,前面是一个0,后边是一个1,前面是个数字,后边是一个列表,这个时候你这个列表本身没问题,但是你要想排序,对不起,出错了。
03:27
为什么?因为小于号不能够被应用到列表和整形数字之间,也就是说你在试图干什么呀?你在试图把1和这个0用小于号去比较。你知道它没法比大小就没法排序是吧?没法比大小就买能排序1<0,这个没问题,列表和列表也可以进行比较,按照字典序进行比较,但是列表和数字它就不能比较了,为什么呢?因为你不是一套东西,一个是数字,一个是一个容器,那你怎么比是吧?所以数值很重要,可是在这个数据结构里边,它的结构是是最重要的。
04:15
它这个数字所在这个结构当中的位置也是非常重要的,那除了这个list的sortt之外,还有没有排序方法?还有一个内建的函数叫sortate,这sortate的怎么用呢?我们可以看这儿有这么一个列表,这个列表是什么?人物列表有五个人,每个人都有他的数学成绩和语文成绩,那我想对这个东西进行排序,那怎么排序?我就先排数学成绩,数学成绩等于什么?等于Sort的谁呀?Student的list排序方法,Key=labda X Mo X中号一数学成绩排序结果是什么?注意75 82 85 90 98,这所以他这数学成绩是排出来了,他是怎么排呢?主要靠的这个东西,拉姆DAX。
05:11
X1,这个是每一条记录里面都有X0 x1 x2,它按照X1这个方式去排序。明确了。按X1这个方式排序,那具体来说,什么是LADA呢?Lameda是一种匿名函数,也就是没有名字的临时函数,特别适合像这种临时用一次的场景。那为什么叫拉姆达呢?他是1930年数学家提出的一套逻辑系统。用匿名函数表达。运算逻辑,这个就是Lam姆DAQQ6拉姆达里,这个运算里面没有这个函数名,它只有这个函数的写法,怎么算,它聚焦做什么,而不是叫什么。
06:00
这就是拉姆达,那这块也是聚焦做什么,而不是。叫什么?他没有名字,但是他完成了任务。可以按照语文成绩排序吗?那语文成绩就是第二项,那么语文成绩是什么?我们可以看到。78,八十八,八十九,92 95,这就是按语文成绩排序了,那我想从高到低行不行,那你排序的时候就得再加一个东西,Rever, 等于你说你怎么知道的,房主文件里写的它为什么不对,应该是revers,那具体来说在哪,那你就去喊救命呗,Sort it.这不有吗?这是前面那列表待排序的列表,这是排序的方法,这个是否翻转。那实际上这是reverse a true, 看语文成绩,95 92 89 88 78。确实是这样的。那我现在想按平均分来这个排序,那平均分儿怎么说啊,平均分儿就是数学成绩加语文成绩是吧,除不除以2了,其实无所谓,为什么呢?因为你除以2了,它就它它它它它除不除二这个数值,那相对大小位置是不变的。
07:13
对不对?我们管它叫average,那么average是谁?就是这样的一个,李四、赵六、张三、王五前妻这样的一个。这个顺序,那我还想要怎么样?数学比语文还重要一点,这行不行,那就不是一个纯粹的相加了,而是什么?数学成绩你要乘以0.6,语文成绩你要乘以0.4,有一个权重,再看所谓的加权的平均。那其实还是这个效果,但是他确实用这个拉姆达表达式已经表达了排序的规则,用这个规则排的序。规则里面很重要的就是权重,权重,我们的生活其实已经离不开权重是吧?比如说你要点个外卖,它其实就是在计算什么,你的位置,店铺的口碑,还有你搜索的关键词,还有店铺实时的报单的量,各种各样的东西其实都是排序的结果,还有我们刷到的新闻是吧?下一首随机推荐的歌曲都是排序。
08:24
排序其实就有权重,权重就有这些权重因素,我还可以拿这个东西做点什么,比如说我想拿它看姓名排序,这行不行,那直接做就不太行,我们得安一个拈,这个拈叫拼音拈,它可以按照姓名排序。新建一个文件,把这个拿过来粘上去。首先还是这个列表,我们把这个拈块拿过来,按照拼音排序,排序它就使用这个函数,排序的过程中,它使用这个拉姆DA函数,用的是什么?这个拼音排序的这么一个,我们可以看到它是把汉字转化成拼音,然后进行排序,乐以礼七言前吴王,王之昂,张之傲,赵。
09:11
这个就是拼音排序。还可以怎么排序,比如说我们再看这么一个东西,首先有四条短信,每条短信有短信内容和短信时间,我想按照短信长度排序,画越少越重越好,那这块儿它就可以排一下序,怎么排序,这回T我就使用Les,哪个Les X0的Les,第0项的Les拿过来之后,我们就可以运行一下,看效果,运行出来我们可以看到这块就列出来了,你说这怎么都一边长,都是因为你这儿用了一个什么,这块儿用了一个冒20,冒20就把这个字符串儿给截了是吧,截成切片,好我们回忆一下这次内容,这次我们玩的是排序,可以通过什么啊,可以加权排序。
10:04
哎,按照拼音排序,按照长度排序,各种排序都是使用的是拉姆达表达式,拉姆的表达式就是一个匿名函数,它定义了这个排序的这个原则,Key.那多维列表还有什么可玩儿的吗?我们下次再说,OEZ加枪。
我来说两句