• 集合,深浅拷贝


    1. 集合(set):就是把一些不同的元素聚集在一起形成集合,在Python中也是数据类型的一种

     不可变数据类型:数字,字符串,元组         可变类型:列表,字典

    作用:去重,去除列表中重复的

          进行关系测试

    1.1  创建集合

    1 s1=set("sang")        可变集合  可添加和删除元素,不能用作字典的键
    dic = {s1:"123"} unhashable type: 'set'
    2 s2= frozenset('alex') 不可变集合 3 print(s2,type(s2))
    结果为:
    {'s', 'a', 'g', 'n'} <class 'set'>
    frozenset({'a', 'l', 'x', 'e'}) <class 'frozenset'>
    1 a = set([ 1,2,3,4,5 ])
    2 b = set([ 4,5,6,7,8 ])
    3 c = set([2,2,3,5])
    4 print(a)
    5 print(b)
    6 print(type(a))
    7 print(type(b))
    8 print(c)
    结果为:

      {1, 2, 3, 4, 5}
      {8, 4, 5, 6, 7}
      <class 'set'>
      <class 'set'>

      {2,3,5}

    如上所示最后结果显示的就是 set的类型,还有通过上面 (c)就可以发现集合的元素是不重复的即它可以自动去重,还有集合是无序的(b)

    1 li=[[1,2],'a','b']
    2 s =set(li) #TypeError: unhashable type: 'list'
    3 print(s)
    集合对象是一组无序排列的可哈希的值其成员可以用来作字典的键

    1.2 访问集合

    1 s = set("sang")
    2 print("a" in s)      
    3 #s[1]                    # 'set' object does not support indexing
    4 for i in s:
    5 print(i)
    结果:
    1 1 True
    2 2 n
    3 3 s
    4 4 a
    5 5 g

    1.3  集合的操作

    增加add

    1 s = set("sang")
    2 s.add(2)
    3 s.add("alex")
    4 print(s)

    结果:

    1 {'s', 2, 'g', 'a', 'n', 'alex'}

    update  添加多个元素

    1 s.update("SANG")
    2 print(s)

    结果:

    1 {2, 'a', 'g', 'n', 'A', 'G', 'alex', 's', 'S', 'N'}

    remove 移除

    1 s.remove("S")
    2 print(s)

    结果:

    1 {2, 'alex', 'g', 'A', 'a', 'N', 'n', 's', 'G'}

    1.4集合的操作符运算

    intersection()交集    #union 并集 a = t |s   t和s的并集       difference  差集    #父集  超集
     1 a = set([ 1,2,3,4,5 ])
     2 b = set([ 4,5,6,7,8 ])
     3 #intersection()   交集
     4 print(a.intersection(b))
     5 print(a & b)
     6 
     7 #union 并集 a = t |s   t和s的并集
     8 print(a.union(b))
     9 print(a| b)
    10 
    11 #差集
    12 print(a.difference(b))#  a-b   in a not in b
    13 print(b.difference(a)) # b-a  in b not in  a
    14 print(a-b)
    15 print(b-a)
    16 print(a.symmetric_difference(b))  #  symmetric对称,差集 ,反向交集
    17 print(a ^ b)
    18 
    19  #父集  超集
    20 print(a.(b))     #a>b
    21 print(a.issubset(b))      #子集issuperseta<b
    结果:
     1 F:Python安装python.exe "G:/Pycharm文件/week4/day13   9.5/集合.py"
     2 {4, 5}
     3 {4, 5}
     4 {1, 2, 3, 4, 5, 6, 7, 8}
     5 {1, 2, 3, 4, 5, 6, 7, 8}
     6 {1, 2, 3}
     7 {8, 6, 7}
     8 {1, 2, 3}
     9 {8, 6, 7}
    10 {1, 2, 3, 6, 7, 8}
    11 {1, 2, 3, 6, 7, 8}
    12 False
    13 False
    14 
    15 Process finished with exit code 0
    
    

    2.深浅拷贝

    有时候我们也许会需要 对一个列表进行复制,但是如果和很多次呢,我们就需要去开辟很大的空间,显然是不行的所以呢我们这里就用到了copy的用法也就是拷贝,

    不可变数据类型:数字,字符串,元组         可变类型:列表,字典

    话不多说我就举一个例子大家看一下 结果又什么不同

     1 import copy
     2 husband = ["xiaohu",123,[15000,9000]]
     3 wife = husband.copy()
     4 wife[0] = "xiaopang"
     5 wife[1] = 456
     6 wife[2][1]-=500            #
     7 print(wife)
     8 print(husband)
     9 
    10 xiaosan = copy.deepcopy(husband)
    11 xiaosan[0] = "jinxin"
    12 xiaosan[1] = "789"
    13 xiaosan[2][1] -=1800
    14 print(xiaosan)                             #
    15 print(husband)
    结果为:
    1 F:Python安装python.exe "G:/Pycharm文件/week4/day13   9.5/深浅拷贝.py"
    2 ['xiaopang', 456, [15000, 8500]]
    3 ['xiaohu', 123, [15000, 8500]]
    4 ['jinxin', '789', [15000, 6700]]
    5 ['xiaohu', 123, [15000, 8500]]
    6 
    7 Process finished with exit code 0
    
    
  • 相关阅读:
    Linux下面rsync 实现 完全一致的同步方法
    [知乎]中国的对外援助
    Linux测试环境简单使用教程
    Java中的DeskTop类使用介绍
    Android应用加入微信分享
    Java中的面向接口编程
    Java泛型的好处
    Android studio 下JNI编程实例并生成so库
    在Android应用中使用Clean架构
    是时候学习Android分屏开发了
  • 原文地址:https://www.cnblogs.com/mars527/p/5844815.html
Copyright © 2020-2023  润新知