zoukankan      html  css  js  c++  java
  • Python_集合、深浅copy、枚举

    集合set

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

    1、集合的创建。

    三种方法:1、直接set()  只能创建一个元素且不能是 int,否则会报错

                       2、set({})可以随便创建

                       3、set = {}

    set1 = set('a')
    set2 = set({'a', 1})
    set3 = {1, 2, 'barry'}
    print(set1, type(set1))
    print(set2, type(set2))
    print(set3, type(set3))
    
    {'a'} <class 'set'>
    {1, 'a'} <class 'set'>
    {1, 2, 'barry'} <class 'set'>

    2、集合的增

    1)、直接增加

    set.app('a)

    2)、迭代增加  update()

    set.update('a')   注意:a会被分解成最小元素,分别添加

    set1 = {'alex', 'wusir', 'ritian'}
    set1.add('女神')
    print(set1)
    
    set1.update('AB')
    print(set1)
    set1.update('老师')
    print(set1)
    set1.update([1,2,3])
    print(set1)
    
    {'wusir', '女神', 'alex', 'ritian'}
    {'ritian', 'A', 'B', 'wusir', '女神', 'alex'}
    {'', 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'}
    {'', 1, 2, 3, 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'}

    3、集合的删
    1)、set.remove('a')    删除指定元素,每次只能删除一个元素

    2)、set.pop()         随机删除一个元素

    3)、set.clear()       清空集合

    4)、del set                  删除集合

    set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
    set1.remove('alex')  # 删除一个元素
    print(set1)
    set1.pop()  # 随机删除一个元素
    print(set1)
    set1.clear()  # 清空集合
    print(set1)
    
    {'ritian', 'barry', 'egon', 'wusir'}
    {'barry', 'egon', 'wusir'}
    set()

    4、集合的其他操作

    1)、交集  (&  或者  intersection)

    set1 = {'as', 23, 'zx', 46, 55}
    set2 = {'qw', 55, 46, 'zx', 8}
    print(set1 & set2)
    print(set1.intersection(set2))
    
    {'zx', 46, 55}
    {'zx', 46, 55}

    2)、并集  (| 或者 union)

    set1 = {'as', 23, 'zx', 46, 55}
    set2 = {'qw', 55, 46, 'zx', 8}
    set3 = {'er', 78, 46, 'zx', 89}
    print(set1 | set2 | set3)
    print(set1.union(set2))
    
    {'qw', 8, 46, 78, 'as', 23, 55, 89, 'er', 'zx'}
    {'qw', 8, 46, 'as', 23, 55, 'zx'}

    3)、差集  (- 或者 difference)
    set1 - set2  是求 set1 中不同于 set2 的元素

    set2 - set1  是求 set2 中不同于 set1 的元素

    set1 = {'as', 23, 'zx', 46, 55}
    set2 = {'qw', 55, 46, 'zx', 8}
    set3 = {'er', 78, 46, 'zx', 23}
    print(set1 - set2 - set3)
    print(set1.difference(set2))
    print(set2.difference(set1))
    
    {'as'}
    {'as', 23}
    {8, 'qw'}

    4)、反交集     (^  或者 symmetric_difference)

    set1 = {'as', 23, 'zx', 46, 55}
    set2 = {'qw', 55, 46, 'zx', 8}
    set3 = {'er', 78, 46, 'zx', 23}
    print(set1 ^ set2 ^ set3)
    print(set1.symmetric_difference(set2))
    print(set2.symmetric_difference(set1))
    
    {'er', 8, 46, 78, 'as', 'zx', 'qw'}
    {8, 'as', 23, 'qw'}
    {8, 'as', 23, 'qw'}

    5)、子集与超集 

    set1 = { 'zx', 46, 55}
    set2 = {'qw', 55, 46, 'zx', 8}
    print(set1 < set2)
    print(set1.issubset(set2))
    print(set2 > set1)
    print(set2.issuperset(set1))
    
    True
    True
    True
    True

    5、frozenset 不可变集合,让集合变成不可变类型
    1)、frozenset 转换的结果是最小元素的集合,但是可以转换 list ,然后编辑。(可以用来列表去重)

    2)、frozenset 会将中间空格当成一个单个的元素生成。

    s = frozenset('yang zhan')
    print(s)
    
    ({'y','a','n','g',' ','z','h'})
    
    
    li = ['qw', 'as', 23, 'as', 23, 4]
    s = frozenset(li)
    print(s, type(s))
    s1 = list(s)
    print(s)
    s1.remove(4)
    print(s1)
    
    frozenset({'qw', 'as', 4, 23}) <class 'frozenset'>
    frozenset({'qw', 'as', 4, 23})
    ['qw', 'as', 23]

    深浅copy

    1、赋值运算

    l1 与 l2 指向的是同一内存地址,他们完全是一样的。

    l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
    l2 = l1
    l1[3][0] = 7
    print(l1, id(l1))
    print(l2, id(l2))
    
    [1, 2, 4, [7, ['er'], 'w', 5]] 6771080
    [1, 2, 4, [7, ['er'], 'w', 5]] 6771080

    2、浅拷贝 copy
    对于浅 copy 来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一内存地址

    ,所有对于第二层以及更深的层数来说保持一致性。

    l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
    l2 = l1.copy()
    print(l1, id(l1))
    print(l2, id(l2))
    
    [1, 2, 4, ['a', ['er'], 'w', 5]] 6771080
    [1, 2, 4, ['a', ['er'], 'w', 5]] 7154376

    3、深拷贝 deepcopy
    深拷贝,两个完全独立的,改变任意一个的元素,无论多少层,两一个绝不改变。

    import copy
    l1 = [1, 2, 4, ['a', ['er'], 'w', 5]]
    l2 = copy.deepcopy(l1)
    l1[3][0] = 7
    print(l1, id(l1))
    print(l2, id(l2))
    
    [1, 2, 4, [7, ['er'], 'w', 5]] 8892680
    [1, 2, 4, ['a', ['er'], 'w', 5]] 8894408

    enumerate : 枚举 


    enumerate : 枚举  ,对于一个可迭代的(iterable)/ 可遍历的对象(如 list、str),enumerate 将其组成一个索引序列,利用它可以同时获得索引和值。

    li = ['电视', '电脑', '手机', '厨具']
    for i in enumerate(li):
        print(i)
    for index,name in enumerate(li,1): print(index,name)
    for index,name in enumerate(li,10): print(index,name) (0, '电视') (1, '电脑') (2, '手机') (3, '厨具')
    1 电视 2 电脑 3 手机 4 厨具
    10 电视 11 电脑 12 手机 13 厨具
  • 相关阅读:
    MongoDB分页处理方案(适用于一般数据库的分页方法)
    linux java cpu 100%
    ueditor
    mysql深入,nginx原理
    spring mvc ajax file upload
    shiro session timeout ajax
    spring 源码解析 pdf
    linux下Nginx+tomcat整合的安装与配置
    Mac 环境下搭建Nginx + Tomcat集群
    easymock 搭建
  • 原文地址:https://www.cnblogs.com/Chong-Yang/p/8086924.html
Copyright © 2011-2022 走看看