00:00
好,接下来我们来说本章的最后一块内容啊,先把这些都关掉,我们说什么呢?哎,说一下我们叫做一个集合,诶集合呢,我们在这儿叫做一个set啊set,呃,那什么叫集合呢?那我们来说一下啊,集合呢,和我们这个呃序列啊,或者说和我们这个列表,诶非常相似啊,非常相似,也就是说它都是直接向我们这个这个诶像我们这个对象中去存储数据的啊,存储数据的,但是它也会有有不同啊,有些不同,诶所以你现在你先有一个概念,集合跟列表有点像啊,有点像,它都是直接把值存储起来的啊存储起来的,但是我们直接来说不同点啊,不同点,那第一个不同点叫什么呢?诶,集合中只能存储我们叫做一个不可变对象啊,只能存储不可对象,像什么字符这个字符串啊,我们这数字呀,我们这种元组啊,什么none啊,True false啊这些东西。
01:00
在我们的集合中都是存储可以存储的,但是你说我要往集合里边,我我再存个字典,我要存个列表,注意这是不行的,它只能存储不可变对象啊,不可对象这是第一个特点,然后第二一个特点叫什么呢?诶集合中存储的这个诶对象是无序的啊,是无序的,那这个无序是相对于什么来说的,相对于我们列表来说的,我们在列表中存储数据,我存在第一个数据就放在索引为零的位置,存在第二个数据是放在索引为一的位置,存在第三个数据放在索引为二的位置,是不是每一个数据都是按照我们存的数据去保存的呀?哎,存的数据保存的,而集合中不是,诶集合中你第一个存进的,第二个存进的,第三个存进的,它没准在哪,没准你第一个存进值能放到第四个,第二个存进放到第五个,第五个存进放到第六个,就是它的顺序都是都是乱的,也就是说实际上它也不是无序的,只是它是不是什么呀,哎,不是按照不是按照我们这个元素的什么呀,哎,元素的插入顺序保存的。
02:00
啊,不是按照元素的插入顺序保存,它也是有一定顺序的,只是它的顺序跟你插入顺序无关啊,给你插入序无关,你先插后插无所谓,它在里边会自动去排序,所以我们叫做一个无序的啊,无序的然后第三一个特点就是什么呢?哎,就是我们集合中什么呀,集合中不能诶出现重复的元素啊,不能出现重复的元素,也就是说集合里边你不能同时出现两个一两个二,两个三,两个hello,两个ABC不能同时出现什么呀,重复元素,也就是说集合中的元素都是唯一的啊,都是唯一的,那这个就是我们说集合的一个特点啊,它和我们这个这个这个。列表很像,但是也有很多不同点啊,也有很多不同点,但是他说是像,其实也不是我们集合你也不能通过索引去找啊,因为没序你就没有办法通过索引去操作了啊好,那接下来我们来说一下我们集合啊,还是我们先找一下文档,告诉你文档在什么位置,还是找到我们的这个叫做library reference这个三大的library啊三大library往下找我们的building types内置,内置类型在这儿我们是不是有一个side types,哎,集合你直接点开它,它会有我们集合的一个什么呀,诶一个这个介绍,诶你可以自己去看一下,这我们就先不用细说了,我们直接来演示啊,直接来演示好。
03:21
那我们来直接来说一下我们的集合啊,创建一个文件,保存一下code,我们来一个叫做一个14。我们的一个集合。呃,集合呢,我们先还是先来说去创建集合,怎么创建集合两种方式我们就可以使用什么呢?使用我们这个大块,诶来创建我们这个集合啊,创建集合或者也可以什么呢?使用我们这个,哎,使用我们这个set这个函数来创建集合,哎,来创建集合啊两种方式,一个是大块,那这里边我们来写一个,我直接来一个S,等于一个大块,我来一个一逗号二逗号三逗号四,这个就是一个集合啊,这个就是一个集合,我们来打印一下,直接来个print,来一个S,我们再来一个type,一个这个S啊打印一下它的一个类型S这一保存,我们这一执行,哎,叫什么class,叫做一个set啊叫一个set,那这个就是我们的一个集合啊,这个就是我们一个集合,好,那集合创建完了,我们来看,那它有什么特点呀,诶老同学说老师你不是说无序的吗?这顺序12341234,这不是一样的吗?哎,注意因为巧了,我插入的顺序跟它排的。
04:32
顺序是一样的,那这时候看着啊,我来一个诶十,然后三,然后五,然后一,然后我写这么一个顺序啊,我是十三五一二对吧,我这一保存它干嘛,123无十,也就是说跟我插入的顺序是不是完全不一样啊,诶所以注意我们所谓的无序指的是什么?就是它数据保存的顺序跟我插入的顺序不同,这叫做一个什么呀,无序啊,这叫一个无序,好,那这个就是我们集合的一个创建非常简单,就是用什么呀,大块啊就用大块,那有的时候我是希望我这么写的,看着啊123111,我这里边是不是有好多一啊,哎,好多一,我们来看效果,我这一直行来看有几个一,是不是只有一个一啊,哎,只有一个一,为什么?因为我们说了集合当中的元素是不能重复的啊,不能重复的,也就是说你这里边的所有重复的都会被去除啊,都会被去除,然后再看一个,再看一个什么呢?S我等于一个大块,注意我这来一个这么一个123,然后再来一个,来一个什么呢?456。
05:32
干嘛了,我是不是在集合中保存的是列表啊,哎,列表我们来看看啊,一执行干嘛了,报错了啊报错了诶按哈希table,诶这个这个哈希table,这个type list,哎,说白了什么意思,就是我们集合当中只能存储什么呀?诶不可变对象啊,不可变对象,而这个对象是不行的啊,这个列表是不行的,只能存我们这些不可变的数字呀,字符串这些东西,这是不行的啊,这会报错啊,这会报错来我把这错误信息粘过来,还让我给关了执行一下啊,我们把错误信给它粘过来,所以这个时候注意啊,我们集合当中只能存储这些不可变的这个对象啊,不可变的象好这个就是我们说一个集合的一个创建啊,集合的一个创建,那接下来我们再看啊,接下来我们再看,那这个时候有的时候我们想创建一个空集合啊,空集合我直接写一个S等于大块行不行,这是不是空集合,哎,不是,这个是一个字典啊,这个是一个字典,如果你要想创建一个空集合,那。
06:32
对不起,你得用什么,你得用我们的这个set啊,你用set,那这里边注意怎么写,我直接来一个S等于一个set,那这个时候创建的就是一个什么呀,这个就是一个空集合,直接看效果走一个S啊,这就是一个空集合,里边什么都没有啊,注意这叫做一个空集合。空集合啊好,那这个创建完了,那我怎么通过set来创建集合呀?哎,我们来说一下我们可以什么呢?哎,我们可以通过我们这个set来干嘛呢?哎来将什么呀,将我们这个序列哎或和我们什么呢?哎字典转换为集合,哎也就是说S它可以将这个序列和字典转换为集合,序列都行啊,比如说我这来一个S等于S我里边我直接传一个列表啊,来一个这个1234511,诶这来一个一一,然后这来一个二二,诶然后这来一个三,来一个四,来个五,随便写一个啊我们这一保存,咱们来一直行走一个是不是就变成12345啊,你会发现它是不是把重复都给去了,哎都给去了,那这里它就把这个列表转换成了一个集合,或者你也可以写什么呀,序列行不行啊,哎,不是这个这个元组行不行啊,哎,当然也行啊,当然也行,或者你甚至可以直接写什么呀,写个字符串,因为我们说了字符串是不是也是序列呀,哎,也是序列。
07:54
这样我们一执行是不是这创建好了,哎,但是它这个he lo lo LOL是不是少了一个,为什么重复了给去掉了,所以时刻注意集合当中的。
08:05
这个元素都是不可重复的啊,都是不可重复的,并且它什么呀,无序的,它跟你插入的顺序没有关系,它会自动对它进行排序啊,自动对它进行排序好,那原组也可以对吧,再来展示一个谁呢?字典S等于一个S,这里边我直接传一个字典啊,字典我来一个A冒号一个一,然后B冒号一个二。B冒号一个,然后这来一个C冒号一个三,那这个时候什么效果啊,还是看一下走一个干嘛了,CBA啊CBA也就是说它跟这值有没有关系,哎,没有关系啊,所以注意我们来说一下,使用我们这个诶set将我们这个字典转换为这个集合史啊,转为集合史它只会包含我们这个字典中的什么呀,哎中的键它只会有键,你说它不会有什么呀,值你那些123它是不会转换出来的啊,它是不会转出来,这个是我们说的一个它啊集合好,那接着来我们再来看啊,那这里我们就可以创建一个集合,我们再来创建一个集合,创建集合就这两种方式啊,一个是使用大括号,一个是我们这个S,我们再创建一个啊S等于一个S等于一个这个A,哎,然后这来一个B,然后这来一个这个一,然后来一个二,然后来一个三啊,所要写一个及额啊,写一个及额,然后一保存,我们先看一下啊,我调整一下格式,调好看一。
09:26
是吧,好看一点,呃,我们来看一下这个保存。执行一下,诶123AB对吧,123AB,那然后呢,我们来看啊,那集合我能不能通过索引来操作呀,哎,直接来一个print呢,试试就完了,S中号一个零,这一保存走一个,诶是不是报错了,哎,所以注意集合是没有办法通过索引来操作,如果你要想通过索引来操作怎么办?你先来把集合转换成什么呀列表,然后这时候才能取啊来来取,所以注意你没有办法通过索引去操作我们这个集合,那这个就是我们集合的一些这个创建啊,集合创建,然后呢,接下来我们接着来说啊,还有一部分知识,我们一块来说一下,集合呢,也可以使用in啊使用in,哎或者什么呢,和我们这个note in,哎来检查我们这个集合中的一个元素,其实你会发现这就没意思了,跟之前是不是都是一样的呀?哎,都是一模一样的啊,这我先住了,我直接来一个print,来什么呢?A,然后印一个S,这一保存一执行是不是true啊,哎,有我来一个C。
10:34
Ins这一保存走,你for是不是就没有啊,哎,没有非常简单啊,Not in我就不展示了啊in,所以还有这个not in,然后还有什么呢?还有我们这个Li,使用我们这个Li来干嘛呢?哎,来获取我们这个集合中我们这个元素的一个数量啊,元素数量直接在这,我们来一个print,来一个L,一个这个S,这一保存一执行五证明我这个集合里边是不是有五个元素啊,哎,五个元素,但是你说我这来个重的,来个重的是不是有两个一啊,这里执行是不是还是五啊哎,因为重的它会自动给你去除啊N获取长度in检查我们这个列表中包不包含指定的一个什么呀元素啊,指定元素好,这是这些,然后有一些情况下,我们还是不是想往集合里去加元素,哎,往集合里加元素,那这个时候怎么加,哎,我们先看一下这一执行,现在123AB对吧,那我们这块我们来说一下加元素,我们调的是一个I的I的这个方法啊,I的方法这是什么呢?诶像我们这个集合。
11:34
中来添加元素啊,添加元素在这里我直接调一个,调一个S点一个I的,非常简单,之前的方法用我这你用就明白啊,用明白我来一个什么呢?我来一个这个十,哎像集合里添加一个元素十,我这一执行十是不是就进去了,哎就进去了,我再来一个S点一个A的,来一个这个30,我这一执行是不是加进一个30啊,哎,30,然后我再来一个,我再来一个30什么效果走你干嘛了,就加不进去了,因为30是不是已经存在了,哎已经存在了就没有办法添加了啊,所以注意I的是向我们集合中添加这个什么呀,添加这个元素啊,添加元素,当然这里边我们可以再看一眼,我们来看什么呢?我们来看看它有没有反应值,I的应该是没有反应值的啊,我们来看一下看方法啊,参数反应值看一下是不是那啊,哎,没有反回值啊,所以注意这块是没有反应值的,好,I的是向集合当中添加元素,然后再来,我们除了艾的呢,还有一个叫做up date,这个跟我们这个map这个字典那是一样的,叫什么呢?诶叫做将。
12:34
哎,将一个这个集合中的这个元素干嘛呢?添加到我们这个当前集合中啊,当前集合中那这块我们直接来一个S点一个艾S点,我先来一个S1吧,S2S2等于我创建一个新的集合啊,等于一个等于一个set set我直接转了转一个这个hello啊把这hello转换成一个集合,然后在这我直接S点一个up update一个什么呢?一个S2我们这一保存,那现在的意思就是什么呀?把S2当中这个元素添加到什么呀?S里啊,添加在S里,这样我这一执行你来看是不是也加进了h helo是不是都进来了,哎,都进来了啊,这个是我们说的一个update update跟我们那个字典那个update是不是一模一样啊,哎,一模一样,但是这里边注意我们传的是什么,哎,集合你假如我传个别的行不行,Up date我传个元组吧,哎,元组来个十二十三十四十一保存行不行啊,哎,我们来看十。
13:34
20 30 40,我再来一个,来一个什么呢?来一个51保存走一个是不是也行啊,哎就是说这里边注意它并不是只能传什么呀,哎,传这个集合也可以传什么呀,传序列啊,也可以传序列,那我们来看我能不能传一个字典呀,传一个字典,字典我就直接写了十,呃十我这来一个这个,咱们这样吧,字典我来一个十,我对应的是一个AB,然后我们这来一个20,然后对应的是一个BC啊,然后来一个这个,呃,100对应的是一个这个CD啊CD,然后这是一个这个1000啊,1000对应的是一个EF,那注意这里边我们的K是什么?十二十,100 1000对吧,那注意了,我问你了,我的K能不能是它?诶当然没问题,只要是不可变类型都可以作为K来使用,这个时候我们来看效果,这一执行你会发现什么玩意儿,哎1000这是不是也进来了,但是它加的只是什么,只是K有没有把AB这些东西加进去,哎,没有加AB啊,没有加AB,所以注意这个阿,你这块。
14:34
可以是什么呢?哎,Update中,哎可以传递我们这个序列哎或字典什么呀,哎作为这个什么呀,哎作为参数,那注意字典只会什么呀,哎只会使用我们这个键啊,只识不会使用的啊,值是不会使用的,好这是我们说的一个up date啊,可以向我们这个集合当中去添加我们这个元素啊,两个方法,一个是at,还有一个叫做up date,好,那添加说完了,我们来说什么呢?说这个删除啊,说这个删除,删除我们来说叫做一个,其实也用过了,叫做一个S点一个号号干嘛的,叫做一个随机,哎删除一个集合中的什么呀,集合中的元素啊,随机删除一个集合中元素,我们来看一下效果。
15:25
那我这这块我得先给他复制一下,为什么呀,因为待会儿他删完了,我不知道他删的是谁对吧,不知道删的是谁,我这一保存咱们来看效果,我这一执行诶。这也。粘过来吧,这玩意儿谁看得出来对吧,诶,CTRLC。看把谁给删了,诶是不是把一给删了呀,哎,把一给删了啊,然后再掉一个,这一保存走一个谁没了,哎,二没了啊,再掉一个一保存走你是谁啊,三就没了对吧?其实你会发现顺序其实好像就是什么呀,它是从头删的啊从头删的删删第一个,然后删第二个,删第三个,但是你注意你不要记这个顺序,它是随机的,为什么还为什么同学说老师我已经看到是从头删的了,你看我掉一次一没了对吧?再掉一次二没了,再掉一次三没了对吧?你已经看到了,是从头看的,老师你为什么还是说随机的,那注意为什么?因为他这个顺序我们控制不了,我们没有办法去控制,是一在前面,二在前面还是三在前面,对吧?我们没有办法控制顺序,这个顺序是由集合或者说是由我们Python的解释器去自己排的,而他是如何排的我们是不知道的,对吧,我们不知道的,所以对于他来说可能是从头删第一个,删第二个,删第三个,删第四个,但是对于我们来说就是什么就是随机的。
16:44
因为它的顺序我们不懂对吧,它的顺序我们不懂,所以你也不用去搞清这顺序,你就记住了,泡泡是干嘛的,是随机删除一个集合当中的元素啊,随机的,然后我们来看返回值,Result等于它一般我们的result,我一般我们泡泡这个方法任何原理都有一个特点,它都会什么呀,删除并返回啊,这一执行做一个是不是一呀,哎,把一给删除了啊,我再执行一下就是谁了,就是一个二了啊,所以注意它会删除并随机删除并返回。
17:19
哎,并返回一个集合中的一个元素啊,这几个叫做一个泡泡啊,它是随机删除的,然后再往下泡泡,这是随机,那有的时候我不想随机怎么办?我们还有一个什么呀?哎,Remove re moe啊remove remove叫什么呢?诶删除我们这个集合中的这个什么呀?诶指令元素啊,删除集合中的指令元素,那我直接来一个吧,来一个这个S点一个这个remove,它里边传的是什么呢?传的是元素,你想删除100,我就写一个100,我这一执行。哎,Result is not DeFined,那这样吧,我把这result写上,它是看看它有没有反应值,一执行,哎,那是不是没反应值啊,那现在来看100是不是就没了,哎,100就没了啊,那这块我就给住了,它没有反应值,那这里边我们来给它往下走一个。
18:05
不要这个道的啊,那我想remove什么呀,我想remove这个1000,我再来一个什么呀,我再来一个这个1000,这一执行走一个1000是不是也没了,哎,1000也没了啊,所以remove非常简单,直接传值啊,直接传值它是什么呀?删除集合中的指定元素,你写谁他就删谁啊,写谁删谁,写100删100,写1000删1000,然后还有一个最后一个我们最狠的,其实说到这儿你会发现这方法老没意思了啊,老没意思叫可粒,可粒叫什么?叫做一个清空我们这个集合,清空我们这个集合,所以在这我们直接调一下,诶S点一个这个clear啊clear clear,我们这一保存一执行空了吧,哎,就变成了一个空集合啊,空集合clear清空集合啊,先注意,那这就完事了啊,Clear,那这个是我们删除的方法三个啊泡泡remove,还有这个clear啊,然后最后一个不演示了,说一下叫做一个copy copy叫什么呀?诶对我们这个集合进行一个什么呀?诶潜复制啊,潜复制copy。
19:06
都是一种潜复制啊,潜复制好,那这个是我们集合的常用方法,那咱们还是过一遍,总之集合就是一个什么,就是一个不可重复的序列,它里边的元素都是不可重复的,什么时候用集合,如果你希望你在这里,这个列表里的元素都是唯一的不重复的,你就可以选择使用集合,但是整体来说用的不多啊,用的不多,我们可能有一些数据,我们需要筛的时候可能用一下,但是大部分情况下都是不用的啊,大部分情况下都是不用集合的,好,我们这来停一下。
我来说两句