元组,字典,集合

1.元组

    作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
    定义:与列表类型比,只不过[]换成()
    age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))

    1.优先掌握的操作:
        1、按索引取值(正向取+反向取):只能取   
        2、切片(顾头不顾尾,步长)
        3、长度
        4、成员运算in和not in
        5、循环
        
2.字典
    作用:存多个值,key-value存取,取值速度快
    定义:key必须是不可变类型,value可以是任意类型
        info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....})
        info=dict(name='egon',age=18,sex='male')

        info=dict([['name','egon'],('age',18)])

        {}.fromkeys(('name','age','sex'),None)

    1.优先掌握的操作:
        1、按key存取值:可存可取
        2、长度len
        3、成员运算in和not in

        4、删除
        5、键keys(),值values(),键值对items()
        6、循环
        
        
        
    案例:
        1.有[11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,
    将小于 66 的值保存至第二个key的值中;
    比如:{'k1': 大于66的所有值, 'k2': 小于66的所有值}
        
            a={'k1':[],'k2':[]}
            c=[11,22,33,44,55,66,77,88,99,90]
            for i in c:
                if i>66:
                    a['k1'].append(i)
                else:
                    a['k2'].append(i)
            print(a)
    
        2.统计s='hello alex alex say hello sb sb'中每个单词的个数
            s='hello alex alex say hello sb sb'
            l=s.split()
            dic={}
            for item in l:
                if item in dic:
                    dic[item]+=1
                else:
                    dic[item]=1
            print(dic)
            
            setdefault的功能
            1:key存在,则不赋值,key不存在则设置默认值
            2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
            d={}
            print(d.setdefault('a',1)) #返回1

            d={'a':2222}
            print(d.setdefault('a',1)) #返回2222
        
            s='hello alex alex say hello sb sb'
            dic={}
            words=s.split()
            for word in words: #word='alex'
                dic.setdefault(word,s.count
                 print(dic)
        
        
            #利用集合,去掉重复,减少循环次数
            s='hello alex alex say hello sb sb'
            dic={}
            words=s.split()
            words_set=set(words)
            for word in words_set:
                dic[word]=s.count(word)
                print(dic)
                
    
3.集合
    作用:去重,关系运算,

    定义集合:
        集合:可以包含多个元素,用逗号分割,
        集合的元素遵循三个原则:
         1:每个元素必须是不可变类型(可hash,可作为字典的key)
         2:没有重复的元素
         3:无序

        注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
     

    常用方法:
        1、长度len
        2、成员运算in和not in

        3、|合集
        4、&交集
        5、-差集
        6、^对称差集
        7、==
        8、父集:>,>= 
        9、子集:<,<=      
        
    案例:
        1.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
      
            pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
          linuxs={'wupeiqi','oldboy','gangdan'}

          1. 求出即报名python又报名linux课程的学员名字集合
                print(pythons & linuxs)
          2. 求出所有报名的学生名字集合
                print(pythons | linuxs)
          3. 求出只报名python课程的学员名字
                print(pythons - linuxs)
          4. 求出没有同时这两门课程的学员名字集合
                print(pythons ^ linuxs)

        
        2.去重
            #列表中元素为可变类型时,去重,并且保持原来顺
            
            l=['a','b',1,'a','a']
            print(set(l))

            l1=[]
            for i in l:
                if i not in l1:
                    l1.append(i)
            print(l1)
            
            l=[
                {'name':'egon','age':18,'sex':'male'},
                {'name':'alex','age':73,'sex':'male'},
                {'name':'egon','age':20,'sex':'female'},
                {'name':'egon','age':18,'sex':'male'},
                {'name':'egon','age':18,'sex':'male'},
            ]
            # print(set(l)) #报错:unhashable type: 'dict'
            s=set()
            l1=[]
            for item in l:
                val=(item['name'],item['age'],item['sex'])
                if val not in s:
                    s.add(val)
                    l1.append(item)

            print(l1)
    
    
    

 

posted @ 2020-10-27 20:20  54菜鸟  阅读(99)  评论(0编辑  收藏  举报