zoukankan      html  css  js  c++  java
  • python---集合及深浅copy

    一、集合

      相信大家都在数学中接触过集合,在python中集合也是有这相同的性质,1、去重,集合会将内部元素自定去重

    2、关系测试,类似数学中的交集并集子集一样

    1.1如何创建集合

       集合在python中的用的符号也是{}和字典的一样,但是内部元素是单独存在而不是键值对的方式

    set = {1,2,3,4,5}
    set1 = {1,2,3,4,5,2,2,2,2}  #自动去重
    print(set,set1)
    #运行结果:
    {1,2,3,4,5}
    {1,2,3,4,5}

    1、集合的增

    #add 追加元素
    set = {1,2,3,5} set.add('kingfan') print(set) #运行结果: {1, 2, 3, 5, 'kingfan'}

    #updata迭代增加
    set.update(['a','b','c'])
    print(set)
    #运行结果:
    {1, 2, 3, 5, 'a', 'b', 'kingfan', 'c'}

    2、删

    #remove 按元素删除
    set = {1,2,3,4,'a',6,7}
    set.remove('a')
    
    #pop 随机删除
    set.pop()
    
    #clear清空
    set.clear()
    
    #del set 从内存上删除
    del set

    2、集合的关系测试

    1、交集

    set = {1,2,3,4,'a',6,7}
    set1 = {2,3,4,8,9}
    print(set&set1)        #{2, 3, 4}
    print(set.intersection(set1))    #{2, 3, 4}

    2、并集

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

    3、差集

    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}

    4、反交集

    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}

    4、子集与超集

    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超集。

     二、深浅copy

      关于深浅copy大家先看下面的列子:

    l1 = [1,2,3,4,5]
    l2 = l1.copy()
    l1[0] = 2
    print(l1,l2)
    #运行结果:
    [2, 2, 3, 4, 5] [1, 2, 3, 4, 5]



    l1 = [1,2,3,[4,5]]
    l2 = l1.copy()
    l1[3][0] = 2
    print(l1,l2)
    #运行结果:
    [1, 2, 3, [2, 5]] [1, 2, 3, [2, 5]]

    可以看出第一个列子在l2浅copy之后,l1修改第一层参数并不会对l2造成影响,而第二个例子中,l1修改来了子列表中的元素后l2也随之改了。对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

      如果想完全独立开与被复制对象的关系则需要引用模块也就是深copy功能:

    l1 = [1,2,3,[4,5]]
    l2 = copy.deepcopy(l1)
    l1[3][0] = 2
    print(l1,l2)
    #运行结果:
    [1, 2, 3, [2, 5]] [1, 2, 3, [4, 5]]

     这样就完全独立开了

  • 相关阅读:
    #4702. gcd
    独特的树叶

    搞笑的代码 ( funny )
    越野赛车问题
    删边(cip)
    最长公共子序列
    美食节
    线段树
    新年快乐
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/9508120.html
Copyright © 2011-2022 走看看