zoukankan      html  css  js  c++  java
  • 元组,字典,集合

    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)
        
        
        
  • 相关阅读:
    Codechef之2014FebChallenge
    Codechef之CodeCraft: IIIT Hyderabad
    原创水题
    用图论模型解决dp问题
    [某模拟赛]一道好题
    萌新java入门笔记
    CodeForces 761C 【DP】
    POJ3268【最短路】
    POJ3191【(-2)进制本质】
    POJ3264 【RMQ基础题—ST-线段树】
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/13887308.html
Copyright © 2011-2022 走看看