• Day4 dict和set


    dict  -- dictionary
        一组key的集合,包含key与value的对应。   
        Python内置的字典,在其他语言中称为map,使用key-value存储,具有极快的查找速度。
    和list比较,dict的特点:
        dict的查找和插入速度极快,不会随着key的增加而变慢。
        dict需要占用大量的内存,内存浪费多。
        list的查找和插入时间随着元素的增加而增加。
        list占用空间小,浪费内存很少。
    dict是一种用内存空间换取运行时间的一种方法
        dict可以用在需要高速查找的地方,几乎无处不在。
    dict的key必须是不可变对象,因为dict根据key来计算value的存储位置,如果key变化了,那么value存储位置就不同,dict内部就混乱了。通过key计算位置的算法成为Hash。
    要保证Hash的正确性,作为key的对象就不能变化。字符串、整数等都是不可变对象,而list是可变的,所以list不能作为key。    
    简单介绍一下dict:   
            成绩对照表
            可以使用两个list来完成,如:
                names = ['Alias','Billy','David']
                scores = [90,60,75]
            给定名字后,根据名字在list的位置,再去另一个list中的对应位置取出元素,得到成绩。 list越长,耗时越多。
           
            使用dict来实现,如:
                result = { 'Alias':97,'Billy':60,'David',75 }
                result[ 'Alias' ]
            这种方式,key和value是一一对应的,存放数据时,必须根据key算出value的存放位置,这样在取值时才会根据key直接拿到value. 一个key只能对应一个值,如果一个dict中有两个key相同时(一个key出现两次), 后出现的key的值会覆盖之前出现的相同key的值.
           
        ##dict中存放key的顺序与录入顺序无关。
       
    将数据存入dict
        1.初始化放入
            result = { 'a':20 , 'b':30, 'c':40 }
        2.通过key放入
            result['abc'] = 12
           
        ##如果key不存在,在调用时会报错。
            1.通过 in 来判断key是否存在。
                'abcd' in result
            2.通过get()来获取key对应的值,如果key不存在, 则返回None
                可如果key不存在,返回None, 或者为不存在的情况指定返回的value。
                如:
                    co = { 'Alias':1 , 'Billy':2 , 'Cyndi':3 }
                    co.get('David')
                    co.get( 'David' , 4 )
    从dict中删除
        pop()
            co.pop('Alias')
            如果不指定pop()中的key ,会报错。 这一点与list不同,list会删除掉最后一个元素。
           
    set
    和dict类似,也是一组key的集合,但是不存储value。由于key不能重复,set中没有重复的key。
    创建一个set
        创建set需要提供一个list作为输入集合。
        s = set( [1,2,3,4] )
        或
        li = [1,2,3,4]
        s = set( li )
       
        set内的list中的元素顺序不表示set是有序的。
        重复元素会被自动过滤。   
    添加元素到set中
        add()
        s.add('a')
       
        list不能作为元素添加到set,会报错。因为list是可变对象。set与dict都不支持将可变对象作为key。
       
    删除set中的元素
        remove()
        s.remove(4)
       
        一次只能remove一个元素。
       
    set可以看做是一个数学意义上的集合,因此多个set之间可以做数学意义上的交集并集操作。
        >>> s1 = set( [1,2,4,8,10,28] )
        >>> s2 = set( [2,4,6,8,10,12] )
        >>> s1 & s2
        {8, 2, 10, 4}       #交集
        >>> s1 | s2
        {1, 2, 4, 6, 8, 10, 12, 28}     #并集
     
    不可变对象
    在此先引入一个新函数 replace()
        a='abc'
        a.replace('a','A')
       
    之前例子里讲,str、int等类型数据都是不可变对象,那么,如果对这些不可变对象进行replace操作,这些对象是不是已经不再“不可变”了呢?
                >>> a = 'abc'
                >>> a.replace('a','BBBBBB')
                'BBBBBBbc'
        实际上, replace之后,再进行print(a) ,会发现 对象(变量)a的值依然是 abc,也就是说,对象a实际上也是一个变量,只不过对象a指向的内容才是str 'abc' , replace之后实际上是新建了一个新的变量,可以通过下面的逻辑来解释这个现象:
                >>> a ='abc'
                >>> print(a)
                abc
                >>> b = a.replace('a','HHHHH')
                >>> print(b)
                HHHHHbc
                >>> print(a)
                abc
        所以,对于不可变对象来说,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会创建新的对象并返回,这样就保证了不可变对象本身是永远不可变的。
     
  • 相关阅读:
    宜未雨而绸缪,毋临渴而掘井。
    JDBC fetch size
    社会主义核心价值观
    JavaEE
    《夜泊牛渚怀古》
    JAVA "GMT+10" 和 "GMT+0010"
    乡村振兴1
    申论 题好文一半
    UCOS时钟与中断:
    任务的状态-挂起和恢复
  • 原文地址:https://www.cnblogs.com/konggg/p/8973893.html
Copyright © 2020-2023  润新知