• 元组、字典、集合基本操作


    元组:元组就是一个不可变的列表

      1.用途:当我们需要记录多个同种属性的值,并且只有读的需求时,应该用元组   

      2.定义方法:在()内用逗号分隔开多个任意类型的元素

    t=('tulipa',)#注意:当元组内只有一个元素时,必须加逗
    t=tuple(('tulipa',))
    t=('tulipa',)
    print(t,type(t))
    print(t[0])('tulipa',) 
    #<class 'tuple'>
    #—>tulipa
    #数据类型转换:
    t=tuple('hello')
    print(t,type(t))
    #('h', 'e', 'l', 'l', 'o') <class 'tuple'>

      3.常用操作+内置的方法   

      3.1优先掌握的操作:  

        1.按索引取值(正向取+反向取):只能读

    t=('a','b','c')
    t[0]='A'
    #报错不能改值

        2.切片(顾头不顾尾,步长)

    t=('a','b','c')
    print(t[0:2])
    #('a', 'b')

        3.长度

    t=tuple('hello')
    print(len(t))
    #5

        4.成员运算in和not in

    t=('a','b','c',(1,2,3))
    print((1,2,3) in t)
    #True

        5.循环

    t=('a','b','c',(1,2,3))
    for item in t:
            print(item)
    #a
    #b
    #c
    #(1, 2, 3)    

      3.2需要掌握的操作

    t=('a','b','b','c',(1,2,3))
    print(t.count('b'))
    print(t.index('b',2,4))
    #2
    #2

    总结

      存多个值

      有序

      不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

    t=(1,'a',['m','n'])
    print(id(t[0]),id(t[1]),id(t[2]))
    t[2][0]='M'
    print(t)
    print(id(t[0]),id(t[1]),id(t[2]))
    #1675259360 2194535694664 2194536741640
    #(1, 'a', ['M', 'n'])
    #1675259360 2194535694664 2194536741640

    字典类型

      1.用途:记录多个不同属性的值  

      2.定义方式:在{}内用逗号分隔开多个元素,每一个元素都是key;value的形式,其中value可以是任意类型,而key必须是不可变类型(通常应该是str类型)

      3.常用操作+内置的方法   

      3.1优先掌握的操作:

         1.按key存取值:可存可取

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    print(dic['name'])
    print(id(dic)
    )dic['name']='EGON'
    print(dic,id(dic))
    dic['height']=1.81 # 如果key不存在则新增一组key:value
    print(dic)​
    #egon
    #2933877980904
    #{'name': 'EGON', 'age': 18, 'gender': 'male'} 2933877980904
    #{'name': 'EGON', 'age': 18, 'gender': 'male', 'height': 1.81}​

        2.长度

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    print(len(dic))
    #3

        3.成员运算in和not#判断是字典的key

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    print('name' in dic)
    #True

        4.删除

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    del dic['name']
    print(dic)
    #{'age': 18, 'gender': 'male'}
    t=dic.popitem()
    print(t,type(t))
    #('gender', 'male') <class 'tuple'>
    v=dic.pop('name')
    print(v)
    #报错

        5.键key(),值values(),键值对items()

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    
    # Python2解释器
    
    # >>> dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    
    # >>> dic.keys()
    
    # ['gender', 'age', 'name']
    
    # >>> dic.values()
    
    # ['male', 18, 'egon']
    
    # >>> dic.items()
    
    # [('gender', 'male'), ('age', 18), ('name', 'egon')]
    
    keys=dic.keys()
    vals=dic.values()
    items=dic.items()
    
    print(keys)
    print(vals)
    print(items)
    
    print(list(keys))
    print(list(vals))
    print(list(items))
    
    #dict_keys(['name', 'age', 'gender'])
    #dict_values(['egon', 18, 'male'])
    #dict_items([('name', 'egon'), ('age', 18), ('gender', 'male')])
    #['name', 'age', 'gender']
    #['egon', 18, 'male']
    #[('name', 'egon'), ('age', 18), ('gender', 'male')]

        6.循环

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    for k in dic.keys():
            print(k)
    #name
    #age
    #gender
    for k in dic:
            print(k)
    #name
    #age
    #gender
    for v in dic.values():
            print(v)
    #egon
    #18
    #male
    for k,v in dic.items():
            print(k,v)
    #name egon
    #age 18
    #gender male

        7.get取值

    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    if 'xxx' in dic:
      print(dic['xxx'])
    else:
      print(None)
    
    v=dic.get('xxx')
    print(v)
    #None
    #None

      3.2需要掌握的操作

    dic.fromkeys()
    li=['name','age','gender']
    dic={}
    for k in li:
            dic[k]=None
            print(dic)
    #{'name': None, 'age': None, 'gender': None}
    
    
    dic={}.fromkeys(li,None)
    print(dic)
    #{'name': None, 'age': None, 'gender': None}
    
    
    dic={'k1':1}.fromkeys(li,None)
    print(dic)
    #{'name': None, 'age': None, 'gender': None}
    
    
    dic={}.fromkeys('hello',)
    print(dic)
    #{'h': None, 'e': None, 'l': None, 'o': None}
    
    
    keys=['name','age','gender']
    vals=['egon',18,'male']
    dic={}.fromkeys(keys,vals)
    print(dic)
    #{'name': ['egon', 18, 'male'], 'age': ['egon', 18, 'male'], 'gender': ['egon', 18, 'male']}
    
    
    keys=['name','age','gender']
    vals=['egon',18,'male']
    dic={}
    for i in range(len(keys)):
            k=keys[i]
            v=vals[i]
            dic[k]=v
    
    print(dic)
    #{'name': 'egon', 'age': 18, 'gender': 'male'}
    
    
    dic={}
    dic.update()
    old_dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    new_dic={'x':1,'name':'EGON'}
    old_dic.update(new_dic)
    print(old_dic)
    #{'name': 'EGON', 'age': 18, 'gender': 'male', 'x': 1}
    
    
    dic.setdefault(k,v)#:执行完毕后是为了保证字典中必须有这么一个k
    dic={'name': 'egon', 'age': 18, 'gender': 'male'}
    v=dic.setdefault('height',1.81) # 字典中没有'height'这个键,则新增
    print(dic)
    #{'name': 'egon', 'age': 18, 'gender': 'male', 'height': 1.81}
    print(v)
    #1.81
    
    
    v=dic.setdefault('name','EGON') # 字典中有'name'这个键,不修改字典
    # print(dic)
    print(v)
    #egon
    
    
    #setdefault的原理分析:
    k='name'
    v='EGON'
    if k not in dic:
            dic[k]=v
    print(dic)
    #{'name': 'egon', 'age': 18, 'gender': 'male'}

    总结

      存多个值

       无序

      可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

    集合类型

    一:引入

    pythons=['李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯']
    linuxs=['kevin','egon','tank','艾利克斯','王铜蛋']
    ​l=[]​
    for item in pythons:    
            if item in linuxs:    
            l.append(item)​print(l)
    #['王铜蛋', '艾利克斯']    

    二:集合set   

      1.用途   

        1.1做关系运算   

        1.2去重   

      2.定义方式:在{}内用逗号分隔开多个元素,多个元素必须满足以下条件   

        2.1每一个元素必须是不可变类型   

        2.2集合内元素不能重复   

        2.3集合无序

    s={1,1.1,'aaa',1,1,1,1,1,1,1,1,1,}
    print(s,type(s))
    #{1, 'aaa', 1.1} <class 'set'>

    注意点:

    d={} 
    # 默认定义为字典
    print(type(d))
    s=set()
    print(s,type(s))
    #<class 'dict'>
    #set() <class 'set'>
    #数据类型转换:s=set('hello')
    print(s)#{'h', 'e', 'o', 'l'}

      3.常用操作+内置的方法   

        3.1关系运算

    pythons={'李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯'}
    linuxs={'kevin','egon','tank','艾利克斯','王铜蛋'}
    
    
    # 求即报名python课时又报名linux课程的学员:交集
    #求所有的学员姓名:并集
    res=pythons | linuxs
    print(res)
    #{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'}
    res1=pythons.union(linuxs)
    print(res1)
    #{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'}
    
    
    #求只报名python课程的学员:差集
    res=pythons - linuxs
    print(res)
    #{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'}
    print(pythons.difference(linuxs))
    #{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'}
    res=linuxs - pythons
    print(res)
    #{'tank', 'egon', 'kevin'}
    
    
    #求没有同时报名两门课程的学员:对称差集
    res=(pythons - linuxs) | (linuxs - pythons)
    res=pythons ^ linuxs
    print(res)
    #{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'}
    print(pythons.symmetric_difference(linuxs))
    #{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'}

    父集/子集: 包含与被包含关系

    s1={1,2,3}
    s2={3,1,2}
    print(s1 == s2)
    #True
    
    
    s1={1,2,3}
    s2={1,2}
    print(s1 >= s2)
    #True
    print(s1.issuperset(s2))
    #True
    print(s2 <= s1)
    #True
    print(s2.issubset(s1))
    #True
    
    
    #长度len
    #成员运算in和not
    #掌握的操作
    s1={'a','b','cc',2,3}
    print(id(s1))
    #2096922059944
    s1.update({3,4,5})
    print(s1,id(s1))
    #{2, 3, 4, 5, 'cc', 'b', 'a'} 2096922059944
    s1.add(4)
    print(s1)
    #{'a', 2, 3, 4, 'cc', 'b'}
    res=s1.pop()
    print(res)
    
    
    #随机
    res=s1.remove('b')
    print(s1)
    #{2, 3, 'cc', 'a'}
    print(res)
    #None
    s1={1,2,3}
    s2={3,4,5}
    s1.difference_update(s2) # s1=s1-s2
    print(s1)
    #{1, 2}
    s1.intersection_update(s2) # s1=s1 & s2
    print(s1)
    #{3}
    s1.symmetric_difference_update(s2) # s1=s1 ^ s2
    print(s1)
    #{4, 5}
    s1={1,2,3}
    # s1.remove(4)
    # s1.discard(4)
    # res=s1.discard(3)
    # print(res) # None
    s1={1,2,3}
    s2={4,5,6}
    print(s1.isdisjoint(s2))
    #True

    总结

      存多个值

      无序

      set可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

      去重

    names=['egon','egon','kevin','kevin','alex','alex']
    l=[]
    for name in names:
            if name not in l:
            l.append(name)
    print(l)
    #['egon', 'kevin', 'alex']
    #如果去重的对象都是不可变类型并且不要求结果跟原来的顺序一致,那么可以用set来解决
    res=set(names)
    # print(res)
    l=list(res)
    print(l)
    
    
    info=[
    {'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'},
    ]
    l=[]
    for dic in info:
            if dic not in l:
            l.append(dic)
    print(l)
    #[{'name': 'egon', 'age': 18, 'sex': 'male'}, {'name': 'alex', 'age': 73, 'sex': 'male'}, {'name': 'egon', 'age': 20, 'sex': 'female'}]
  • 相关阅读:
    十大排序算法之选择排序(2)
    十大排序算法之冒泡排序(1)
    2018年年度总结
    敏捷软件开发学习笔记(四)之结构型设计模式
    敏捷软件开发学习笔记(三)之创造型设计模式
    elasticsearch+head+kibana
    闭包函数延迟绑定问题
    初谈dango的post提交csrf设置和文件上传
    浏览器的同源策略,及如可跨域
    socket并发通信的几种方式
  • 原文地址:https://www.cnblogs.com/ShenJunHui6/p/10220454.html
Copyright © 2020-2023  润新知