zoukankan      html  css  js  c++  java
  • 集合数据类型,拷贝,深拷贝,浅拷贝

    5.9自我总结

    1.集合数据类型

    1.定义

    用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个

    2.算法

    1.必须掌握

    1.长度len
    set_1 = {1,2,3,4,5}
    print(len(set_1))
    #5
    
    2.成员运算in和not in
    #表示判断集合里面是否有某个值
    set_1 = {1,2,3,4,5}
    print(1 in set_1)
    #True
    print(100 in set_1)
    #False
    
    3.并集(union或者|)
    #两个集合的集合综合,union或者|
    set_1 = {1,2,3}
    set_2 = {3,4,5}
    set_3 = set_1.union(set_2)
    set_4 = (set_1 | set_2)
    print(set_3)
    print(set_4)
    #{1, 2, 3, 4, 5}
    

    )

    4.交集(intersection或者&)
    set_1 = {1,2,3}
    set_2 = {3,4,5}
    set_3 = set_1.intersection(set_2)
    set_4 = (set_1 & set_2)
    print(set_3)
    print(set_4)
    #{2}
    

    )

    5差集(difference 或者 -)
    set_1 = {1,2,3}
    set_2 = {3,4,5}
    set_3 = set_1.difference(set_2)
    set_4 = (set_1 - set_2)
    print(set_3)
    print(set_4)
    #{1,2}
    

    http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%B7%AE%E9%9B%86.jpg

    6.对称差集
    set_1 = {1,2,3}
    set_2 = {3,4,5}
    set_3 = set_1.symmetric_difference(set_2)
    set_4 = (set_1 ^ set_2)
    print(set_3)
    print(set_4)
    #{1, 2, 4, 5}
    

    http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86.jpg

    7.集合内容是否相同(==)
    set_1 = {1,2,3}
    set_2 = {3,4,5}
    print(set_1 == set_2)
    #False
    
    8.父集(>或者>=或者issuperset)
    set_1 = {1,2,3}
    set_2 = {1,2,3}
    set_3 = set_1.issuperset(set_2) #issuperset与>=意思相同 
    set_4 = (set_1 > set_2) #如果set_2 = {2},结果也为True
    print(set_3)  #True
    print(set_4)   #False
    
    9.子集(<或者)
    set_1 = {1,2,3}
    set_2 = {1,2,3}
    set_3 = set_1.issubset(set_2) #issubset与<=意思相同 
    set_4 = (set_1 < set_2) #如果set_2 = {2},结果也为True
    print(set_3)  #True
    print(set_4)   #False
    

    2.掌握

    1.add

    添加,打印添加时候回返回None

    2.remove

    移除,打印添加时候回返回None,找不到移除的内容会报错

    3.difference_update

    删除相同的值 打印添加时候回返回None

    4.discard

    移除,打印添加时候回返回None,找不到移除的内容也会返回None

    5.isdisjoint

    判断有无交集

    3.一个值或多个值

    一个值

    4,有序的或无序的

    无序的

    5.可变的或不可变

    可变

    2.深拷贝,浅拷贝,拷贝

    比如说A拷贝B,A里面的值发送变化时候B也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说A浅拷贝B,其中B可变元素变了,A也变了,B中不可变元素变了,A不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。

    3.今日题目

    第一部分

    有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合。

    pythons={'jason','nick','sean','tank','gangdan','tiepao'}
    linuxs={'tank','oldboy','gangdan'}
    
    1. 求出即报名python又报名linux课程的学员名字集合

      pythons={'jason','nick','sean','tank','gangdan','tiepao'}
      linuxs={'tank','oldboy','gangdan'}
      pythons_linuxs = pythons & linuxs
      print(pythons_linuxs)   
      
    2. 求出所有报名的学生名字集合

      pythons={'jason','nick','sean','tank','gangdan','tiepao'}
      linuxs={'tank','oldboy','gangdan'}
      pythons_linuxs = pythons | linuxs
      print(pythons_linuxs)
      
    3. 求出只报名python课程的学员名字

      pythons={'jason','nick','sean','tank','gangdan','tiepao'}
      linuxs={'tank','oldboy','gangdan'}
      pythons_linuxs = pythons - linuxs
      print(pythons_linuxs)
      
    4. 求出没有同时这两门课程的学员名字集合

      pythons={'jason','nick','sean','tank','gangdan','tiepao'}
      linuxs={'tank','oldboy','gangdan'}
      pythons_linuxs = pythons ^ linuxs
      print(pythons_linuxs)
      

    第二部分

    1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序

      #去重
      l=['a','b',1,'a','a']
      new_l = set(l)
      
    2. 在上题的基础上,保存列表原来的顺序

      #第一种,想法,先用SET把他变成有序,再找到相同的删掉在原来的位置,后面循环发现删了后索引没法索引,就根据长度再套了个循环
      l=['a','b',1,'a','a']
      l_2 = set(l)
      while len(l) != len(l_2):
          for v_1 in range(len(l)):
              for v_2 in range(1,len(l)):
                  if l[v_1] == l[v_2]:
                      d = v_2
                      break
          del l[d]
      print(l)
      #第二种 做第三题发现里面有字典没法转换成set,想到这样,后来发现这样就可以了。。
      l_2 = []
      for A in l:
          if A not in l_2:
              l_2.append(A)
      print(l_2)
      
    3. 有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

    l=[
        {'name':'nick','age':18,'sex':'male'},
        {'name':'tank','age':73,'sex':'male'},
        {'name':'nick','age':20,'sex':'female'},
        {'name':'nick','age':18,'sex':'male'},
        {'name':'nick','age':18,'sex':'male'},
    ]
    
    #第一种
    l=[
        {'name':'nick','age':18,'sex':'male'},
        {'name':'tank','age':73,'sex':'male'},
        {'name':'nick','age':20,'sex':'female'},
        {'name':'nick','age':18,'sex':'male'},
        {'name':'nick','age':18,'sex':'male'},
    ]
    l_2 = []
    for A in l:
        if A not in l_2:
            l_2.append(A)
    while len(l) != len(l_2):
        for v_1 in range(len(l)):
            for v_2 in range(1,len(l)):
                if l[v_1] == l[v_2]:
                    d = v_2
                    break
        del l[d]
    print(l)
    #第二种 由于列表里有字典没法SET,然后想到这样加进去,后面就这样了
    l_2 = []
    for A in l:
        if A not in l_2:
            l_2.append(A)
    print(l_2)
    

    第三部分

    1. 请简述拷贝、浅拷贝、深拷贝三者之间的区别:
    比如说A拷贝B,A里面的值发送变化时候B也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说A浅拷贝B,其中B可变元素变了,A也变了,B中不可变元素变了,A不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。
    
  • 相关阅读:
    IIS7 503错误 Service Unavailable
    android错误系列之导出数据库出错Failed to pull selection
    android学习笔记(入门篇)
    使用cmd命令删除文件夹下所有文件
    vue 动态插入组件
    js获取当前时间
    获取带参值
    以毫秒为单位的时间长度转化为时分秒时间格式的时间长度
    js如何复制一个对象?
    想在已创建的Vue工程里引入vux组件
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10840697.html
Copyright © 2011-2022 走看看