• 20201214 集合及其运算


    4. 集合操作
    集合是一个无序的,不重复的数据组合,它的主要作用如下:
    1. 去重,把一个列表变成集合,就自动去重了
    2. 关系测试,测试两组数据之前的交集、差集、并集等关系
    
    1-1
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    print(list_1,type(list_1))
    
    --->
    {1, 3, 4, 5, 6, 7, 9} <class 'set'>
    
    集合有点像字典,其实不是字典
    集合也是无序的
    
    1-1-1
    1ist_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_1,list_2)
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    
    1-1-1-1
    如何快速取出交集?
    # 交集
    print(list_1.intersection(list_2))
    --->
    {4, 6}
    
    1-1-1-2
    # 并集
    print(list_1.union(list_2))
    --->
    {0, 1, 2, 3, 4, 5, 6, 7, 66, 9, 8, 22}
    两个集合合并一起了
    
    1-1-1-3
    # 差集 in list_1 but not in list_2
    print(list_1,list_2)
    print(list_1.difference(list_2))
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    {1, 3, 5, 7, 9}
    
    1-1-1-4
    # 差集 in list_2 but not in list_1
    print(list_1,list_2)
    print(list_2.difference(list_1))
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    {0, 2, 66, 8, 22}
    
    1-1-1-5
    # 子集
    print(list_1,list_2)
    print(list_1.issubset(list_2))
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    False
    
    1-1-1-6
    # 父集
    print(list_1,list_2)
    print(list_1.issuperset(list_2))
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    False
    
    list_3 = set([1,3,7])
    print(list_3.issubset(list_1))
    print(list_1.issuperset(list_3))
    --->
    True
    True
    
    1-1-1-7
    # 对称差集
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_1,list_2)
    
    print(list_1.symmetric_difference(list_2))
    --->
    {1, 3, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22}
    {0, 1, 2, 66, 3, 5, 8, 7, 9, 22}
    # 去掉了交集,取出互相没有的,放一起,去掉重复的
    
    # 关系就这些,交集,并集,差集,父集,子集,对称差集
    
    2-1
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    list_3 = set([1,3,7])
    list_4 = set([5,6,8])
    print(list_3.isdisjoint(list_4))
    --->
    True
    
    2-1-1
    list_3 = set([1,3,7])
    list_4 = set([5,6,7,8])
    print(list_3.isdisjoint(list_4))
    --->
    False
    
    2-2
    用符号表示交集
    # 交集
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_1 & list_2)
    --->
    {4, 6}
    
    2-2-1
    用符号表示并集
    # 并集
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_2 | list_1)
    --->
    {0, 1, 2, 66, 4, 3, 6, 5, 8, 7, 9, 22}
    
    2-2-2
    用符号求差集
    # difference
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_1 - list_2)  # in list 1 but not in list 2
    --->
    {1, 3, 5, 7, 9}
    
    2-2-3
    用符号求 对称差集
    # 对称差集
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)
    
    list_2 = set([2,6,0,66,22,8,4])
    print(list_1 ^ list_2) 
    --->
    {0, 1, 2, 66, 3, 5, 8, 7, 9, 22}
    # 顺序同样没关系
    
    3-1
    我们对集合还可以进行 增删改查
    list_1 = set([1,4,5,7,3,6,7,9])
    
    list_2 = set([2,6,0,66,22,8,4])
    list_1.add(999)
    print(list_1)
    # 添加位置是无序的
    --->
    {1, 3, 4, 5, 6, 7, 999, 9}
    
    3-1-1
    添加多项
    list_1 = set([1,4,5,7,3,6,7,9])
    list_2 = set([2,6,0,66,22,8,4])
    list_1.update([888,777,555])
    print(list_1)
    --->
    {1, 3, 4, 5, 6, 7, 9, 777, 555, 888}
    
    3-1-2
    删除
    使用 remove() 可以删除一项
    t.remove('H')       # 去重
    
    3-1-3
    x in s 
    测试 x 是否是 s 的成员
    
    x not in s
    测试 x 是否不是 s 的成员
    
    s.copy()
    返回 set "s" 的一个浅复制
    
    3-1-4
    list_1.discard()
    remove 如果不存在会报错
    discard 如果不存在,不会报错
  • 相关阅读:
    LINUX和git
    drf [Django REST Framework]
    python用法小技巧
    爬虫
    django入门到精通
    前端框架
    mysql数据库
    网络编程和并发编程
    面向对象
    python基础
  • 原文地址:https://www.cnblogs.com/azxsdcv/p/14133021.html
Copyright © 2020-2023  润新知