00:00
我们将在本节当中为大家讲解我们这一章最后的内容,什么东西呢?元组,为什么将元组和列表放到一章呢?原因看出来一切端倪。首先什么是元组呢?元组的定义也是一组有序数据的组合,大家看到这个概念,再回去想一下列表的概念,我们列表概念是不是也是一组有序数据组合呀?所以元组和列表定义几乎是一样的啊,唯一一点不一样在后面这句话,元组不可以修改啊,而列表是不是可以修改呀,这是它俩不一样的地方啊。如果你把列表比作用铅笔写的一个清单的话,我们想改的话,想涂的话,是不是可以随时Q1涂一下是不是?而我们的元组像用钢笔写,写完之后就不能改了,当然你也不能删,也不能加啊,那这样一来看的话,元组的什么呀,操作就会少很多,也是没错啊,这一小节就完全讲完了,首先来先看一下元组的定义。元组的定义呢?和列表定义很相似,但又不太一样,如何进行定义的呢?麦下线扣的六。
01:06
下线幺零要想定义元组的话,我们也先得看一下空元组的定义行不行,先看一下空元组的定义啊,空元组的定义采用的方式也是两种,第一种是什么呢?直接写一个变量啊,等于一个小括号就可以了啊,小括号小括号是给原子用的,中包是给列表用的啊,或者使用第二种方式就是我们的什么呢?原组函数直接是变量啊,等于一个PU突破函数就可以。写错了啊,Tu突破函数就可以,这两种方式都可以得到空元组,我们来测试一下返回代码当中啊,在里边空元组的一个操作。互组,我们可以在这里边直接啊写上一个top啊,就是图等于一个小括号,我们来尝试打印一下它的类型和值,是不是一个元组呢?来tap检测一下我们的变量top啊。
02:03
我们会在控制台中看出来,它真的是一个元组,而且是一个空的,什么都没有,对不对,但是第二种方式呢,也可以使用啊,这是第一种方式,第二种方式呢,则是使用原组函数,直接top等于top突破函数。然后呢,写完之后我们再次打印这个新的变量啊,Top,那么它的结果其实和上面并没有什么不同啊,所以这是创建空元组的方式,空元组讲完了之后,我们给大家讲创建具有一个元素元素啊,具有一个元素的元素啊,元素其实就是我们元组中的值嘛,那在这里边很多时候为啥要讲一个元素的,你不是应该加多个元素吗?元组在这块有点不太一样啊,所以让大家来看一下来我们的top top等于。写上一个小框,我在小框上写一个250,很多说这不就是只有一个元素元组吗?没错,你看起来很像的,然后我们打印这个变量啊,同时再打印一下它的类型啊,Top,我们会惊奇的发现问题出现了,这并不是一个圆组的250是不是?而是一个整形的250,这就奇怪了,这不是明显写着元组了吗?所以这就是问题所在,如果我们需要定义一个元组的话,必须在元组中加一个逗号。
03:23
必须在原组加一个逗号,这个时候才是只有一个元素的元组,如果你不写这个逗号的话,它一定不是元组类型,明白吗?所以元组只有一个元素,必须要加一个逗号。当然如果选具有多个元素元组的话,那就简单了,具有多个元素的元组,那这你可以随心所欲了,Top等于括号里边123,你只要超过了一个你们,呃,你们来写的时候呢,就不需要在乎什么非得加一个逗号了啊,逗号间隔一下就可以了,这就是具有多个元素的元素,看见没有?是不OK了,好了,原组织定义就这么简单,讲完了它的定义之后呢,我们来看一下元组的相关访问和操作行不行,非常少啊,因为元组能够不能够改,所以它能够动使用的内容是比较少的,下我面来看一下它的基本操作了,行不行,基本操作啊。
04:18
基本操作元组能不能做一些基本的增删改查操作呢?答案是不能,只能做一个操作访问元组的元素啊,元组的元素只能进行访问,不能做任何的修改啊删除啊,新增操作,因为元组不让改嘛,对不对,所以当你有一个元组的时候,对吧?等于抛山括号里边啊,我们可以随意的在这里边写一些数字,24啊,34啊,五十四十四啊,什么五六十七啊,随便写,我们只能够进行访问操作访问的时候呢,元组也提供了它的编号,因为它一直有序数据啊,所以编号是零,编号是一,编号是二,编号是三,就是它的正向索引与它的反向索引,这个我们和列表是一样的啊,其实学员列表在学员元组的话,就非常简单的来负三啊,然后负四。
05:09
那访问的时候呢,依然使用变量加中括号的方式进行访问,我如果想访问444,你就可以写一个二的,所以来运行变是不是440出来啊,如果我想访问34,我可以使用反向索引的负三来排上括号。我们写上啊top套上括号中括号写上负三就可以。来右键运行一遍,那完了基本操作就这些,当然接下来看我们原组能不能进行分片操作的呢?啊,这个也是可以的啊,分片操作这个也是可以的啊,比如说我们这里边有一个元组,写一个什么呢?写一个这个语言吧,行不行,Itp语言啊,变成语言,我们在语言中写出多种语言来,比如说我们写上什么PHP啊,写上PHP是不是,写上什么C啊,写上C加加写上什么C加啊,能是有C加语言吗?真的有C加语言啊,这没人用就是了,C加,然后呢,还有我们的c sharp,然后呢,再来什么这个VB,是不是还有什么v for啊等各种各样的语言,咱的语言有好多好多了,然后还有什么v for是不是,然后呢,再来我们的P。
06:19
YN,再来我们的Java Java好搞定,就这些吧,然后呢,我如果想对它进行分片操作的话,那是可以做到的,比如说我想获取所有带C的行不行,那就这些呗,那这个时候呢,我们编号就要输上了,零编号一,编号二,编号三,编号四,编号五,编号六,编号七,编号八。啊,这正向编号反向编号我就不用了,好吧,你可以自己写一下,那你如果想获取带C的话,是不是应该从一到几五之前对不对,所以是可以使用分片操作的friend套上括号,我们可以在里边使用it这个变量中括号加上什么呢?从一开始到五之前加一些右键运行一遍啊也是可以进行分片操作的,是不是取出来了是不是,只不过取的结果还是原废话,远走分辨嘛,是不是,然后呢,我们在这里边很多说,那我能不能加跳步呢?也可以啊,在里边我们可以print抛三块,这个我就不再大家写格式了啊,因为它和列表是完全相同的操作ID这块,比如说我从呃,这个从开头到结尾吧,行不行,然后隔一个一取行不行,隔一个一取右键运行一遍啊,那这个时候它取的结果是PP,你看PPC加加C加是不是,然后是微缝,然后是Java是不是可以跳出去啊,所以分片的话和列表是一样的啊,和列表一样。
07:45
和列表一样啊,但是注意不能使用分片赋值啊,因为分片赋值属于修改操作对不对,所以分片赋值是无法在原组中进行尝试的,这个大家要注意一下,那么我们的基本操作完了之后呢,为大家来讲解一下什么呢?我们原组的这个常见常用函数啊,常用函数,但不是原组函数是常用函数,那这常用函数也有四个,分别是max。
08:12
分别是给大家写注释吧,常用函数是max,然后呢,M。我估计大家又猜出来了,是不是,然后let。然后是我们的突破啊,所以对它来说这四个函数也没什么难度吧,因为我们刚学了一表,是不是都学过啊,嗯,来把这些结构先写一下吧啊同元组呃,单个元素元组,那这个时候必须是变量等于。变量啊,等于。括号里边写一个值。这个括号不太对啊,是中文的括号里写上一个值。然后呢,在这里边必须加一个逗号啊,然后多个值就简单了,具有具有。多具有多个数据的元素。
09:01
啊,数据的元组啊,什么元素啊元素啊啊,那这个时候呢,就是变量等于直接写上变量等于括号里边可以写上多个值值,直接使用逗号分割就可以了,或者是采用另外一种方式啊,就是我们的类型转换。啊,或者我们可以这样做,变量等于直接使用我们的变量啊不,不是原组转换函数突破。Tu,然后啊T,然后呢,在这里边放一个容器数据就可以啊,容器数据也可以进行转换,然后呢,又给大家讲了一下它的基本操作。基本操作,我们发现除了访问什么都不是,不是什么都做不了啊,只可以使用索引访问元素。访问元组啊,不可以进行其他操作,不可以进不可以啊,不可以进行其他操作,因为元组不能修改,对不对,之后呢,就给大家讲了我们的分片操作啊,分片操作是可以的啊,这个操作和列表一致。
10:11
列表一致,可以分片,可以跳步,也可以设定什么开始索引加结束索引啊,这些都没有什么区别,那我们接着往下看,那么下面这些常用函数这四个,哎,给大家稍微做个实验看一看吧,行不行?其实它和列表也是一样的啊,来常用函数这四个函数,那么这四个函数我们之前学过,应该也知道意义,Max获元组中的最大值,Min则是获取元组中最小值,然后呢,类是什么呢?获取列表元组中数据的长度啊,元组中元组中数据的个数。拓就是拓,就是创建元组,或者是将其他数据,将其他数据转化为元素啊转化。
11:06
为元组。所以这些东西都没什么难的,好了,来我们看一下这些函数的应用啊,这个函数的应用呢,倒比较简单,首先呢,我们在这里边写一个元组top啊,等于小括号里边写上啊,你可以写上多个数据。当时很多学生纳闷,说我能不能在这写什么呀?我能不能在里边写汉字啊,行,但是他会用编码的方式帮你排啊,但是我们又不知道汉字编码,所以你最好不要写汉字这样的符号啊。当然你要写拼音的话,它会按ask个码给大家排掉,来print方啊,我们直接要取,要获取其中最大值,先拿一个变量result来接收一下top啊,把这个top放到max当中啊,写上变量,然后呢,返回其中的最大值,这里边最大值应该是324对不对?IUT来运行一遍。等你是不是324啊,嗯,其实它跟列表没什么区别的,然后呢,再来看一下我们的最小值操作,把这个ma改成M就可以了,最小值应该是一个一啊,所以返回的是一个一,对不对?然后呢,长度的话来看一下长度检测,直接LN里边放一下我们的圆组长度,一个两个,三个,四个,五个,六个,七个,八个,九个,十个,十一十二十三十四十五个长度来看是否正确呢?运行一遍是不是长度为15啊对不对?转换的话我们就不写了,因为我们都很熟悉了啊,那当然我们这个元组的便历和列表的便历也是一样的,这个就不再做过多的赘述了,好不好,元组的便历和列表一样啊,元组的便历。
12:39
然后呢,这里边儿从列表一样。从列表一样,包括什么呢?包括什么?嵌套列表也可以啊,嵌套元组和嵌套列表也也没什么区别啊,也一致,用法都是一样的啊,用法都是一样的。那接着来往下讲啊,这个我电力就不给大家写了,好不好,下面给大家讲一下不一样的一个东西啊,是什么东西呢?叫元组推导式,嗯,元组推导式啊,可能列表与推导式元组也有啊,有元组推导式这个大家嗯要来了解一下推导式,元组推导式和列表推导式最大的不同在于什么呢?不在于它的格式,而在于它的结果。
13:22
注意到了,元组推导式的结果不是元组很多是,那是列表吗?也不是啊,既不是元组,也不是列表,而是生成器啊,而是生成器。生成器,但是这个东西大家来说是比较不太好理解的一个概念啊,当然我会给大家介绍的啊,语法注意语法从列表是一样的,从列表。推导式一样。推导式这个语法倒没什么区别啊,语法与列表推导式一致啊,但是也有不太一样的地方啊,也有不太一样的地方啊。
14:04
哪些地方不一样呢?叭如说我们要写一个列表推导式的话,那肯定是什么呀,肯定是呃,结果变量,结果变量等于什么呀?For一个变量,然后in我们的列表是不是,那我现在应该印元组啊,没错,一元组,然后呢,把变量提取出来放前面啊,这个一样没什么区别,然后呢,注意它外边不能加中括号了,因为加中括号得到的结果是列表对不对,我现在是圆组啊,所以它外边是一个小括号啊,它外边是一个小括号。这是我们的最基本的元组推导式的一个操作啊。本操作或者叫基本语法基本操作,基本这个推导式啊,给大家写写行不行。好,来看一下这个基本推导式的使用啊,为了给大家更好的学习呢,我要在里边新建一个文件啊,推导式这个东西还是比较重要的,在里边我们新建一个文件,卖下线扣的六下线幺幺文件。
15:05
在这里边给大家介绍一下元组最小式。圆组推导式。元组推导式啊,好了,那首先我们需要一个元组,我们在里边声明一个数字元组行不行?老规矩啊,小括号里写上一二三四五六七八九十。十。然后呢,在这里边基本的操作的话,和上面都是一样的啊,基本操作直接是result等于for一个IE,我们的number是不是变列元组啊,然后呢,为了得到一个结果,是一个元组推导式的结果,两侧必须以小块的方式进行书写。书写完了之后呢,提取的变量I放到前面,那么这个时候我们就完整的把原组中的数据复制了一份,啊,很多人那是不是在result里边啊,啊,不是啊,不是result的结果很奇怪,它并不是一个元素,大家会发现这是个啥东西,看不懂啊,这个东西称之为生成器。
16:11
很多师这啥数据类型啊,它的数据类型就是生成器类型啊,来给大家看一下它的数据类型好不好。那么它的数据类型则是生成器啊。来直接写下result,它的结果是生成器啊,类型也叫生成器类型,看见没有,当然很多学学说了啥叫生成器啊,这里边涉及到了一个概念啊,就是生成器的概念,我会在后边给大家专门留一留一节的时间给大家讲一下生成器相的概念,现在只是简单给大家提一下行不行,我们这里边儿学习过程当中会用到两个东西,一个叫做迭代期。一个叫做迭代器。迭代器一个叫做生成器,这么两个东西,那迭代器什么样的呢?举一个例子,列表就是迭代器的一种啊。
17:03
列表就是迭,迭代器,迭啊代器的一种注意,只是可以这么理解啊,可以这么理解,但实际上这样说法也不够准确啊,可以这样理解,它有什么特征呢?数据预先。预先啊,叫做存储在内存中,简单的说,我如果做出来一个列表,那列表有多有多少个数据我都要读取到内存中,就这个效果,我列表中有十个值,那我这十个值都在内存中,我列表都有5G5G的内存中,那么这样带来一个问题啊,什么问题?如果我的列表中的数据非常之大,大到了什么呢?超过了我内存的容量,比如说我只有两个G的内存,那我现在这个列表的数据占了什么呀?七个G,那你七个G的数据肯定读不到内存当中去啊,因为内存就两个G嘛,是不是这个时候列表就完成不了操作,甚至会导致你的系统崩溃。
18:00
明白吗?这是迭代器啊,但是它有个好处就是这玩意儿你直接读到程中用也方便,然后数起来是不是也方便啊,所以大家可以把列表认为是迭代器的种啊,可以这么认为,OK,然后呢,生成器什么意思呢?我们元组推导式的结果。就是一个生成器啊,注意是元组推导式的结果,我可没说元组式啊,原组其实也是连连带器的一种啊,可以这么理解,那与生成器什么意思呢?呃,生成器是原子推导式的结果的一种,它这个不一样,比如说。我要做100个馒头,那么如果是以迭代器的方式的话,他会把这一百百个馒头全都做出来放到案板上,那么这个时候大家可以一眼看出啊,这100个馒头谁想买,随着来拿,直接拿,是拿几要几个拿几个,要几个拿几个是不是就可以了?好,那生成器的操作和迭代器不一样,生成器是一个比较懒的一个东西啊,或者叫一个人你要一你要做100个馒头。
19:00
比如说他要做100馒头,他就跟你说什么呀啊,我知道了,他没有做,就比如说我要去买馒头的时候,我说老板你这有100个馒头吗?老板说有啊。但他只是知道他能做出100个馒头,或者说他得到了他要做100个馒头的命令,但他不做,案板上一个馒头都没有,我说老板给我拿一个馒头,他做一个给我,我说老板再给我拿一个馒头,他又做一个给我,也就说我需要一个,他就给我一个做一个给我一个,我需要一个做一个给我一个,我需要一个做一个给我一个,这样的话就会一个好处,什么好处呢?我内存多大我不在乎,比如说我有七个G的数据,但是我的内存只有两个G,怎么办呢?我就一次我先读个一个G啊,用完了我给你了,我再读一个G,把原来的清空,再读一个G,清空了再读一个G,这样无论数据有多少,我是不是都可以通过一点点做一点给你,一点做一点,给你一点,然后节省内存的一个开销啊,是不是,所以生成器这个东西实际上是非常高级的一个应用,在Python当中非常重要,我会单独抽章节给大家讲生成器和迭代器好不好,所以现在只是了解一下这个特征就可以了,什么特征呢?它的数据啊。
20:06
是需要的时候才需要的时候制作需要的时候。时候啊时候才制作。材质叫做需要的时候才。制作不需要的时候不做任何操作啊,不需要的时候。的时候。只是等待而已啊,只是等待就是我知道你这个事儿,但我不做,你什么时候往我要什么时候做啊,就这个效果,然后呢,我们现在通过result或者叫通过原子推导式已经得到了一个什么生成器了,是不是?他说那我生成器该怎么样能得到里边的值呢?很简单啊,我们刚刚说了,生殖器就是一个非常懒的人啊,他要你要馒头必须告诉你给我做一个,或要给我拿一个他才给你,否则的话,他只是在那站着,就是不做馒头啊,所以我们要想要这里边的值的话,生成器可以帮我们做的,怎么做呢?看好了,我们要做的操作其实并不难,只要做一个操作就可以了,叫做便利啊生成器。
21:11
变为生成器,你只需要for一个什么呢?I in我们的result,你FOR1个别的也可以啊,但是上面I是不是用过了,你可以for一个G吧,行不行,In我们的result。也就是说我用这个什么呀,我用这个J去便利这个生成器,那么其实这个时候生成器每次便利的时候生成就哦,有人找我要东西了,我做一个给他,有人找我要东西做一个给他了,明白了吗?所以result其实只是得到了一个结果生成器,并且生成器知道你要什么东西,但他没有做。你问他要的时候,就是便利的时候,我说便利一个我就要一个,便利一个要一个,你要的时候他就给你了,所以这个时候你是可以看到结果的。看见了吗?是不是一二三四五六七八九十是不是都出来了,所以要想让它得到生成器里的数据,必须什么呀?让它干活,那便利就是最常见的一种方式,而这就是我们的原子最角式,那原子最角式自然也可以加判断条件了,来带有判断条件的原组最角式啊,带。
22:07
有判断条件。条件的元组推导式,那么效果其实和列表的就一样了,只要基本的过去了,剩下就没什么问题了。依然以我们上面这个number为例啊,以我们上面这个number为例,我们希望取出里边的基数做成一个生成器,该怎么做呢?Result等于for一个I in我们的number。元组对不对,然后呢,取出这里边的时候有条件啊,只要记数啊,所以Fi求于二等于于一,是不是只有求于二等于一的这个I我才留下来是不是,那留下来的时候,你可以在里边组成一个新的原组,推导式的结果就是我们的生成器前面加一个小括号,后面加一个小括号,然后把I提取出来就可以了,那么这个时候我们又得到了一个新的生成器啊,所以result打印出来之后还是个生成器的,你会发现它永远是个生成器,要想要这个生成器,依然要便利生成器本身啊,这个时候就是说白就通知生成器,你自己给我干活去,是不是他去干?那么这个时候大家来看,我只是这次操作里边只有基数,是不是只有13579看见了吗?嗯,当然你也可以乘一个数,比如说我乘一个乘一个十,那就是把你得到13579乘以十,得到什么呀?十啊,30啊,50啊,70啊,90啊,是不是剩下的我就不再为大家继续讲解了,因为剩下的就是多循环的原子最式啊,还有我们的带有判断条件的多循环原子推导式啊。
23:33
和列表完全一致,它唯一不一样的地方就是结果啊,是一种生成器,你要记住生成器,生成器需要操作才有结果啊,生成器。生成器需要操作才会得到结果,它不像列表一样,你想访问哪个就访问哪个,你必须往他要,他才给你啊,我们的最常见操作就是别例,那剩下的推导式我就不再给大家一类来一一赘述了啊,因为剩下的和列表一样,OK。
24:05
只需要知道它的结果不一样就可以了。在最后的一部分我要为大家讲解什么呢?我们列表中的不不不不,元组中的常用函数,元组中的函,常用函数其实跟列表又一样了,为什么这么说呢?其实我们列表中啊不不,我们元组中能够使用的函数少之又少,你看列表的函数这么多。列表函数是不是这么多,十多个呀,但是你会发现添加呀,删除呀,清空呀,是不是都在修改原有列表。所以这些函数在原子里都用不了啊,那唯一不改的东西啊,只有两个。我是不是少讲一个函数啊,所以少讲了一个函数啊,是在这里边有一个函数忘给大家讲了,不过之前给大家用过啊,叫index函数,还记得吗?Index函数做的是获取某个值在列表中的索引啊,这个。我在原组这块给大家一直接讲的好不好,用法就是这样的,这讲是没讲,应该没没讲这个啊,之前用过都是用过啊,直接写上列表,点index写上值就可以了。
25:10
就这个用法好了,那我们来看一下,在这里边唯一不改的其实只有谁呀,Index和count count呢?所以元组能够使用的函数啊。或者叫做元组专用函数。专用的函数,我们一般称它为方法啊,只有一个叫做index和一个count这么两个,只有这么两个函数啊,一个index函数,一个函数,大家也会发现这两个函数是不会修改原图本身的吧,是不是啊,这两个人,这两个函数实际上也从列表那块拿过来的嘛,那它的作用,Index刚刚咱写过了,它的作用是什么呀?将我们列,不将我们元组,这不是应该叫获取啊,获取指定的值在元组中的索引。
26:03
元组中的,所以这个跟列表的效果是一样的啊,那count的作用就是获取某个或者叫指定的吧,指定的值在元组中出现的次数,嗯,然后呢,在这里边我们来看一下它的格式啊,格式跟列元组那个跟列表那个也是一样的,直接写上原组点啊原。组点index,要查什么值,就把值写在这里边就可以了,Count也是啊,不,不是原组啊,也对,Count也是这个操作啊,元组点Co,你想查某个值,值出现了次数,就把这个值往这里边一放就可以了,所以对于元组而言啊,就这么两个函数,别的没有,列表中其他函数它也用不上,它也没别的,那在列表我们给大家写一个文件,做一个测试好不好,非常简单,在里边写一个文件,麦下限CODE6,下限12。好,先来看一下什么呢?Count函数的应用在这里边,我们先写一个数字列表啊,数字元组吧,行不行,等于小括号当中啊,小括号当中就随便写数字了。
27:09
好。比如说这个数这里边有很多二,是不是我们先查下二出现了几次怎么办呢?直接元组NNu.con查什么就把什么写在里边就可以了,返回值为它的出现次数,结束了之后,我们在里边打印一下这个result,就可以查一下二出现了几次了,右键运行一遍程序。二出现了五次,那么抗达数就完了,跟列表是不是一样的用法,再一个就是index啊,Index用法在列表那块没给大家写啊,我给大家补上了,那么我们在这里边给大家讲元组的时候,大家注意去听就可以了,因为它的功能和作用跟列表是一样的用法,首先呢,在这里边啊,我们写一下啊,我们在里边写一下一个元组nu别写没了tu up吧,行不行?写上加l girls等于元祖,我们写上四大美女啊,貂蝉。
28:03
西施。貂蝉西施。杨玉环。和王昭君。王昭君,好,是不是定义完元组了,那我想查一下杨玉环在元组中的索引是多少呢?你自己数当然也可以了,是不是,但程序不能,它程序用的时候你不能说我来帮他数啊,是不是?所以我们有专门的函数index来获取,Result等于in girls.index。就是要查索引了,查谁的索引呢?查杨玉环的,你就把杨玉环的值往我们的。中一放这个时候啊,少了个引号啊,这个时候它就会以帮我们获取出杨玉环在列表啊,不是不是在我们的元组中的索引是多少,当然它给的只是正向索引啊,注意来右键运行一遍,看到没有正向索引是不是啊,012是不是对了啊,原组讲完了,所以本质上元组和列表没什么区别,唯一的区别就是元组是不可以修改的,所以本小节到此结束,感谢大家收听,我们下一章再见。
我来说两句