zoukankan      html  css  js  c++  java
  • day8 字典的补充以及集合

    一、上节课程回顾:

    1、id 地址的比较,字符串不能超过20 个

    i="a"*21
    j="a"*21
    print(i is j)   #False
    
    k="a"*20
    h="a"*20
    print(k is h)    #True

    2、(1) id( ) 内存地址

           (2)== 比较的是值

                 is 比较的是内存地址

        数字,字符串有小数据池

               int -5--256

           str : 1,不能有空格

                     2,长度不能超过20

                     3,不能有特殊字符如:#@。。。。。

    3、 enumerate   枚举    iterable:str,list,tuple,dict,set

    # for i in enumerate(iterable):
    #     print(i)
    # for i in enumerate(["barry","alex"]):
    #     print(i)      #(0, 'barry')
                       # (1, 'alex')
    # for index,i in enumerate(["barry","alex"]):
    #     print(index,i)        #0 barry
                              #1 alex
    # for index, i in enumerate(["barry", "alex"],100):
    #     print(index, i)      #100 barry
                             #101 alex

    4、编码

          bytes 是特殊的编码方式(特殊的str,区别在于前面多了一个b)类似于str list tupe 存在于python2 中 在python 中没有

       py3    

             str :表现形式  :s="alex"  实际编码方式:unicode

             bytes:表现形式:s=b"alex"   实际编码方式:utf-8,gbk,gb2312...

                                     s=b'x2ex2ex2ex2ex2ex24e"

             unicode:所有字符(无论英文,中文等)1个字符,4个字节

              gbk:一个字符,英文1个字节,中文两个字节。

               utf-8:英文1个字节,欧洲:2个字节,亚洲3个字节。

    面试题:  判断类型。。,在字符串后面加上 , 表现是元组类型

    tu=(1)
    tu1=("name")
    print(tu,type(tu))     #1 <class 'int'>
    print(tu1,type(tu1))   #name <class 'str'>
    tu=(True)
    tul=("name",)
    tu2=("name")
    print(tu,type(tu))       #True <class 'bool'>
    print(tul,type(tul))     #('name',) <class 'tuple'>
    print(tu2,type(tu2))     #name <class 'str'>

    二、新内容

    1、列表的循环  

         当循环列表时,如果在循环中删除某个或者某些元素,列表的个数改变,索引改变,容易出错。

    删除列表中的偶数  (利用倒序删除的方法可以避免索引的改变)

    # 方法一:
    # li=[11,22,33,44,55]
    # l2=[]
    # for i in li:
    #     if i %2==0:
    #         l2.append(i)
    # print(l2)
    # 方法二:
    # li=[11,22,33,44,55]
    # del li[1::2]
    # print(li)
    # li=li[0::2]
    # print(li)
    # 方法三
    # li=[11,22,33,44,55,66,77,88,99]
    # for i in range(0,len(li)//2):
    #     del li[i+1]
    # print(li)
    # 方法四(非常重要)
    # li=[11,22,33,44,55,66,77,88,99]
    # for i in range(len(li)-1,0,-1):
    #     if i%2==1:
    #         del li[i]
    # print(li)
    View Code

     2、fromkeys  (字典的补充)

    dic=dict.fromkeys([1,2,3],"杨1")
    dic1=dict.fromkeys("abc","杨1")
    print(dic)           #{1: '杨1', 2: '杨1', 3: '杨1'}
    print(dic1)         #{'a': '杨1', 'b': '杨1', 'c': '杨1'}
    dic2=dict.fromkeys(["barry","alex"],[])
    print(dic2)                 #{'barry': [], 'alex': []}
    dic2["barry"].append(11)
    dic2["alex"].append(22)
    print(dic2)               #{'barry': [11, 22], 'alex': [11, 22]}

    3、例题将键里面含有字母“k”的键值对删除

    # 第一种方法:
    dic={"k1":"barry","k2":"alex","name":"ritian"}
    for i in dic.copy():
        if "k" in i:
            del dic[i]
    print(dic)           #{'name': 'ritian'}
    # 第二种方法:
    dic={"k1":"barry","k2":"alex","name":"ritian"}
    for i in list(dic.keys()):
        if "k" in i:
            del dic[i]
    print(dic)         #{'name': 'ritian'}
    # 方法三:
    dic={"k1":"barry","k2":"alex","name":"ritian"}
    dic2={}
    for key,value in dic.items():
        if "k"not in key:
            dic2[key]=value
    dic=dic2
    print(dic)              #{'name': 'ritian'}
    删除键中带有“k”的

    4、转化

    1、 int----->str:  str(int)

    2、str------>int: int(str)  字符串必须全部由数字组成

    3、bool ------->str: str(bool)

    4、 str--------->bool(str)    除了空字符串,剩下的都是True

    5、 int———>bool  除了0,剩下的全是True

    6、bool --------->int  True----->1   False------->0

    7、str ---------->list   split

    8、list--------->str()   join

    9、tuple------->list    : list(tuple)

    10、list------>tuple  :   tuple(list)

    11、  str----->list     :    list(str)          print(list("abd"))     #['a', 'b', 'd']

    12、list------->str :   str(list)

    用布尔值 判断  0 {}  []  () set{}   ------->False

    三、集合是无序的,不重复的数据集合,他里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希的(所以集合做不了字典的键)

    以下是几个重要的两点:

    去重,把一个列表变成集合就自动去重了。

    关系测试,测试两组数据之间的交集、差集、并集等关系。

    1、利用集合和列表的相互转化,达到去重的目的

    l=[1,1,2,2,3,4,5,5,5,56,7]
    l=set(l)
    l=list(l)
    print(l)    #[1, 2, 3, 4, 5, 7, 56]

    2、集合的创建

    add     update迭代增加

    集合的内部是无序的
    set1={1,2}
    # update:迭代增加
    set1.update("A")
    print(set1)     #{1, 2, 'A'}
    set1.update(["老师"])
    print(set1)       #{'老师', 1, 2, 'A'}
    set1.update([1,2,3])
    print(set1)       #{1, 2, 3, 'A', '老师'}

    集合的删除  

    remove   pop(有返回值)    clear   del

    set1={"alex","barry",1,2,3}
    set1.remove("alex")
    print(set1)         #{1, 2, 3, 'barry'}
    s=set1.pop()   #随机删除一个元素有返回值
    print(set1)      #{2, 3, 'barry'}
    print(s)         #1
    
    set1.clear()  
    print(set1)       set()     (set() 是空集合的表现)
    del set1

    集合是不能是不能更改的(因为是可哈希的,不可变的数据类型和str一样)

    可以查,只能用for 循环的方式

     求集合的交集:   &    intersection  

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1&set2)                #{4, 5}
    print(set1.intersection(set2))  #{4, 5}

    求集合的并集:  |  union

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1| set2)           #{1, 2, 3, 4, 5, 6, 7, 8}      
    print(set1.union(set2))    #{1, 2, 3, 4, 5, 6, 7, 8}

    求集合的差集   -    diference

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1- set2)           #{1, 2, 3}
    print(set1.difference(set2))    #{{1, 2, 3}

    求集合的反交集 ^      symmetric_difference

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1^set2)         #{1, 2, 3, 6, 7, 8}
    print(set1.symmetric_difference(set2))    #{1, 2, 3, 6, 7, 8}

    子集和超集:     。。。是。。。的超集issuperset      。。。是。。。的子集issubset

    set1={1,2,3,4,5,6,7,8,9}
    set2={4,5,6,7,8}
    print(set1>set2)           #True    set1是set2的超集
    print(set1.issuperset(set2))        #True    set1是set2的超集
    print(set2<set1)             #True  set2 是 set1的子集
    print(set2.issubset(set1))      #True  set2 是 set1的子集

    frozenset 不可变集合  让集合变成不可变的类型

    s=frozenset("barry")
    print(s,type(s))   #frozenset({'r', 'y', 'b', 'a'}) <class 'frozenset'>

    3、浅  copy

     在浅 copy 过程中只能在列表的第一层发挥作用,第二层还是相同的

    l1=[1,2,3,4]
    l2=l1.copy()
    l1.append("barry")
    print(l1,id(l1))     #[1, 2, 3, 4, 'barry'] 38485064
    print(l2,id(l2))     #[1, 2, 3, 4] 38452040
    l1=[1,2,[2,3,4],3,4]
    l2=l1.copy()
    l1[2].append("barry")
    print(l1,id(l1),id(l1[2])) #[1, 2, [2, 3, 4, 'barry'], 3, 4] 35568456 35601480
    print(l2,id(l2),id(l2[2])) #[1, 2, [2, 3, 4, 'barry'], 3, 4] 35601352 35601480

    4、深copy   copy.deepcopy()

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝不改变

    import copy
    l1=[1,2,[2,3,4],3,4]
    l2=copy.deepcopy(l1)
    l1[2].append("barry")
    print(l1,id(l1),id(l1[2]))     #[1, 2, [2, 3, 4, 'barry'], 3, 4] 35884040 35883848
    print(l2,id(l2),id(l2[2]))     #[1, 2, [2, 3, 4], 3, 4] 35918152 35918088
  • 相关阅读:
    MongoDB配置及解答mongodb cmd中安装及连接数据库 mongodb无法安装及连接数据库解答
    类封装版学生管理系统,连接数据库,增删改查,拿去用,不谢。
    python学生管理系统连接数据库版,很详细,这个是用函数版的增删改查,拿去用,不谢。
    京东双十一
    Ubuntu中以root权限运行软件sudo命令不输入密码
    Ubuntu 18.04中sudo运行的程序无法切换输入法中文输入问题
    UVA12558 埃及分数
    NOI1999 生日蛋糕
    Tarjan
    AC自动机
  • 原文地址:https://www.cnblogs.com/number1994/p/7896295.html
Copyright © 2011-2022 走看看