• python基础七--集合


    12.22
    1、昨日内容回顾

    小数据池:
            int:-5--256
            str:1.不能有特殊字符
                2.*int不能超过20
        编码:所能看到的最小构成单位叫字符
            ascii :  8位 1字节  表示1个字符
            unicode  32位  4个字节  表示一个字符
            utf- 8  1个英文 8位,1个字节
                    欧洲 16位   两个字节  表示一个字符
                    亚洲 24位   三个字节  表示一个字符
    
            gbk    1个英文 8位,1个字节
                    亚洲 16位   两个字节  表示一个字符
        bytes:
            s = 'alex'
            b = s.encode('utf-8')
            print(b)  # b'alex'    

    2、今日内容讲解
    1.基础数据类型汇总补充

    str

    int

    list
       在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。
    bool


    dict
       1,fromkeys()

    tuple元祖

         如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。

    2、集合
        可变的数据类型,他里边的元素必须是不可变的数据类型,无序,不重复

    (1)创建集合

    set1 = set({1,2,3,})
    print(set1)

    (2)增删查

    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.add("jing")
    set1.update("kkkk")
    print(set1)
    set1.pop()
    set1.remove("alex")
    set1.clear()
    del set1
    for i in set1:
        print(i)

    (3)集合的操作

    交集
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 & set2)
    print(set1.intersection(set2))
    并集
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1|set2)
    print(set1.union(set2))
    差集
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 - set2)
    print(set1.difference(set2))
    反交集
    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))
    子集与超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    
    print(set1 < set2)
    print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
    
    print(set2 > set1)
    print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
    去重
    li = [1,2,33,33,2,1,4,5,6,6]
    set1 = set(li)
    print(set1)
    li = list(set1)
    print(li)
    s1 = {1,2,3}
    print(s1,type(s1))

    3、深浅copy

    赋值运算
    l1 = [1,2,3,['barry','alex']]
    l2 = l1
    
    l1[0] = 111
    print(l1) # [111, 2, 3, ['barry', 'alex']]
    print(l2) # [111, 2, 3, ['barry', 'alex']]
    
    l1[3][0] = 'wusir'
    print(l1) # [111, 2, 3, ['wusir', 'alex']]
    print(l2) # [111, 2, 3, ['wusir', 'alex']]    
    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。    
    
    浅copy
    
    l1 = [1,2,3,['barry','alex']]
    l2 = l1.copy()
    print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
    print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
    l1[1] = 222print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
    l1[3][0] = 'wusir'
    print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
    print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
    深copy
    import copy
    l1 = [1,2,3,['barry','alex']]
    l2 = copy.deepcopy(l1)
    
    print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[1] = 222
    print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
    print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
    
    l1[3][0] = 'wusir'
    print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
    print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变    

    4、补充

    枚举:enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
    li = ['alex','银角','女神','egon','太白']
    for i in enumerate(li):
    print(i)
    for index,name in enumerate(li,1):
    print(index,name)
    for index, name in enumerate(li, 100): # 起始位置默认是0,可更改
    print(index, name)   
    删除索引为奇数位的元素
    lis = [11,22,33,44,55]
    #
    第一种
    lis = [11,22,33,44,55]
    lis = lis[::2] print(lis)
    #第二种
    lis = [11,22,33,44,55]
    l1 = []
    for i in lis:
        if lis.index(i) % 2 == 0:
            l1.append(i)
    lis = l1
    print(lis)
    View Code
    
    
    #第三种
    lis = [11,22,33,44,55]
    for i in range(len(lis)-1,-1,-1):
        if i % 2 == 1:
            print(i)
            del lis[i]
            print(lis)
    print(lis)
    View Code
  • 相关阅读:
    kafka概念使用简介注意点
    spring boot整合log4j2
    postgresql和oracle数据库对比
    postgresql数据操作
    Django缓存序列化信号
    Django补充
    Git学习
    JavaScript语法和类型
    Django分页
    Vue:配置组件
  • 原文地址:https://www.cnblogs.com/TheLand/p/8086013.html
Copyright © 2020-2023  润新知