Python 内置容器 之 set ( 集合 )

  python 的内置容器  :    有四个 

                      list (列表)        set (集合)        tuple(元祖)           dict  (字典)

set  :  集合    { } 

                   Set  的本质还是 Hash 表(哈希,散列表) 的实现 : 

                           正宗的 Hash (散列表)它的特点就是 :  无序,不能重复 !!

    

        定义  set   :     有两种方法来 定义(获取) set  

                     通过弱数据类型的方式 来定义 set 

                        首先,先了解一个点就是,在 Python 的四种容器里,其中, set  和  dict  都是以 {}

                        的形式展现的!!!

                        但是, dict  和  set  { } 里面的内容却是不一样的!!

                        

                        先看一个示例 :

                        

                         可以看到,我们虽然给 s 定义的是以 { } 的方式(我们想要定义一个 set 但是,

                         type 函数返回给我们的是一个 dict )

                        当{ } 里面没有值的时候, 系统是首先默认为 是 dict 类型!!

                         所以, set 的定义的第一种方式就是 要给 { } 里面直接有值( 因为,set 和 dict { }

                         里的值是完全不一样的呀!!!)

                        示例  :

                        

                         图示即是 set 的第一种定义({ } 里面带了值)。

                         大家还可以根据上示 看到,我们在最初给 s 赋的值,和最终 s 显示出的值好像不

                         太一样,我们最初赋的值里面有 两个 16 但是最终显示的只有一个!并且我们的排

                         序好像也被打破了。   

                         这就对应了 我们最早说的 散列表的特点 : 无序,和 不重复!!

           #        第二种定义 : 利用 set  的全局函数 

                     示例  :

                     

                     这种定义的方式就是 直接 把 set 当做全局函数来定义,直接表明我就是要一个 set

                     这种方式,就可以解决第一种那样解决不了的——可以定义一个 空set 

                     

                     在这里,在额外提一下 : 我们 Python 的这四个容器里,有的是可以相互转化的,

                     这个 set {  }  是可以接受一些东西的!!

                     比如 : 线性表 可以转化为  哈希表, 哈希表也可以转化为 线性表!!

                     示例 :   将  列表  转化为  集合 

                       

                    大家可以发现 : 当给 set 里面传了一个列表的时候,出来的就是一个 set 集合(而

                                               且 这个 set 已经把 列表里的数字重复的已经去掉了!遵循了 哈希表

                                               的规律)

                    

                      示例 : 将  集合 转化为 列表 

                       

                       这就又转化为 列表了!!

                       拓展 :  有一道面试题 : 如何去重列表中的重复元素 ?

                                     示例  :

                                     

                                      可以发现 : u1 里有大量的 重复值, 而 set 就能去重,并且 ,set 和 list

                                                          能够相互转化,所以我们利用 set 来去重!!!

 

        set 的访问  :

                                #   首先,在前面,我们就讲过, set 它是无序的,所以它的元素也是无序

                                     的,所以它的元素就没有下标的!! 

                                     因此,set 是无法访问元素的!!!

       

       set  的遍历  : 

                                #   关于遍历,我们想想,之前的遍历都会用到谁呢 ??

                                     我们目前的知识,关于遍历,最经常使用的 就是   While  和  For 了,

                                     那是不是 While  和 For  都可以用到 我们的 set 集合中去呢 ??

                                      答案是否定的!! 

                                      我们清楚  set 是没有元素下标的,但是 While 在遍历的时候是需要 下标

                                      所以,While 是不能用到  set 中去的!!!

                               #   For  循环 遍历 set 

                                    示例  :

                                     

                                      For 是一种 迭代; 它都可以遍历无序的东西!!

     常见方法

                         add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection',

                        'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove',

                        'symmetric_difference', 'symmetric_difference_update', 'union', 'update'

                        我们介绍几个常用 :

                        add :           添加新元素 

                       示例  :

                                     

                                     #  可以看到 添加进去的元素 也是没有什么明显的规律的,并且,我们添加

                                         了一个 set 本身就已经含有的元素 (试着 冲击一下 重复性 )发现也没

                                         报错,但是 set 集合也并没有多了两个一模一样的值!!

                 

                      clear  :         清空 {  }  里内容 

                                       

                      copy  :         复制   

                      示例  :

                       

 

                     intersection :      取交集,取相同

                     示例  :

                      

                      两个集合!!

                      取交集 :

                      

                     difference :         取差集,取不同 

                     示例  :  

                      

                      :  注意    bb.difference 和 ss.difference 的区别 

        

                         union :               取并集,取所有 

                       

 

                        discard :            删除元素  不报错 

                        

                        同样是给 ( ) 里写要删除的值, 删除后再查看发现确实删除掉了,再次操作一次,

                        会发现没有报错 !!     

                         remove  :           删除元素     会报错 

                         

                          用法相似,但再次删除后会报错!!

                         pop    :       随机删除元素,并且返回删除元素

                         示例 :

                       

                         我们发现,pop 删除后返回的元素好像就是按照顺序走的!!

                        再看示例 :

                        

                         因此我们得以结论 :

                         pop 是会按照顺序删除元素并且返回元素的,当集合的内容为空时,再使用pop,

                         则会报错

                         

                          

                 

                        

 

                    

                     

                         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值