• 数据类型-----集合


    一、集合

    1.定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key;
    集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值。

    2.特性:
    • 不用元素组成,且元素不重复
    • 无序
    • 元素不可变(数字、字符串、元组)

       3.基本格式:

    s = {1,2,3,4,'age'}
    print(s)              ##输出s
    print(type(s))        ##输出s的格式
    
    输出:
    {1, 2, 3, 4, 'age'}
    <class 'set'>

       4.集合的去重功能

    s = {1,2,3,3,3,3,3,3,3,3,3}
    print(s)      ##重复的元素只输出一次
    
    输出:
    {1, 2, 3}    

       

      5.字符串转集合

    s = set('hello')     ##使用for循环,并自动去重,且输出无序
    print(s)

    输出:
    {'l', 'o', 'e', 'h'}

    二、集合的内置方法

    • 添加元素
    s = {1,2,'age'}
    s.add('1')     ##由于这里添加的1是字符串类型,所有不会去重
    print(s)
    
    输出:
    {1, 2, '1', 'age'}
    • 清空元素
    s = {1,2,'age'}
    s.clear()
    print(s)     ##输出空的集合
    
    输出:
    set()
    • 复制集合
    s = {1,2,'age'}
    l = s.copy()
    print(l)
    
    输出:
    {'age', 1, 2}
    • 删除
    s.pop()             ##随机删除一个集合中的元素
    s.remove('sb')      ##删除指定的元素,但是当被删除的元素不存在时会报错
    s.discard('sbbb')   ##删除指定的元素,当被删除的元素不存在时不会报错

    三、集合的关系运算

    1.求交集

    例: 存在两个列表,python_l = [ 'lcg' , 'szw' , 'zjw' ]         linux_l =  [ 'lcg' , 'szw' , 'sb' ] ,找出两个列表中共同存在的元素

    方法一:使用列表的方法和in方法、for循环

    python_l = [ 'lcg' , 'szw' , 'zjw' ]
    linux_l =  [ 'lcg' , 'szw' , 'sb' ]
    python_and_linux_l = []
    for p_name in python_l:
        if p_name in linux_l:
            python_and_linux_l.append(p_name)
    print(python_and_linux_l)             ##输出为一个列表
    
    输出:
    ['lcg', 'szw']

    方法二:使用集合的方法

    python_l=['lcg','szw','zjw','lcg']
    linux_l=['lcg','szw','sb']
    p_s=set(python_l)                ##将两个列表转换为集合
    l_s=set(linux_l)
    #求交集
    print(p_s,l_s)                   ##分别输出两个集合
    print(p_s.intersection(l_s))     ##输出两个集合的交集
    print(p_s&l_s)                   ##输出两个集合的交集(同上),输出为一个集合
    
    输出:
    {'szw', 'zjw', 'lcg'} {'szw', 'sb', 'lcg'}
    {'szw', 'lcg'}
    {'szw', 'lcg'}

    2.求并集

    python_l=['lcg','szw','zjw','lcg']
    linux_l=['lcg','szw','sb']
    p_s=set(python_l)
    l_s=set(linux_l)
    print(p_s.union(l_s))     ##union和|的效果相同
    print(p_s|l_s)
    
    输出:
    {'szw', 'lcg', 'zjw', 'sb'}
    {'szw', 'lcg', 'zjw', 'sb'}

    3.求差集

    python_l=['lcg','szw','zjw','lcg']
    linux_l=['lcg','szw','sb']
    p_s=set(python_l)
    l_s=set(linux_l)
    print('差集',p_s-l_s)             ##求p_s中有而l_s中没有的元素
    print(p_s.difference(l_s))       ##同上
    print('差集',l_s-p_s)             ##求l_s中有而p_s中没有的元素
    print(l_s.difference(p_s))       ##同上
    
    输出:
    差集 {'zjw'}
    {'zjw'}
    差集 {'sb'}
    {'sb'}

    4.交叉补集

    python_l=['lcg','szw','zjw','lcg']
    linux_l=['lcg','szw','sb']
    p_s=set(python_l)
    l_s=set(linux_l)
    print('交叉补集',p_s.symmetric_difference(l_s))
    print(p_s^l_s)
    
    输出:
    交叉补集 {'zjw', 'sb'}
    {'zjw', 'sb'}

    5.求差集并将结果重新赋值给p_s

    python_l=['lcg','szw','zjw','lcg']
    linux_l=['lcg','szw','sb']
    p_s=set(python_l)
    l_s=set(linux_l)
    
    print(p_s,l_s)
    print('差集',p_s-l_s)
    print(p_s)
    p_s.difference_update(l_s)     ##相当于p_s=p_s-l_s
    print(p_s)
    
    输出:
    {'lcg', 'zjw', 'szw'} {'lcg', 'szw', 'sb'}
    差集 {'zjw'}
    {'lcg', 'zjw', 'szw'}
    {'zjw'}

    四、集合的内置函数

    1.判断两个集合是否有交集

    s1 = {1,2}
    s2 = {3,5}
    s3 = {2,6}
    print(s1.isdisjoint(s2))    ##不存在交集输出True
    print(s1.isdisjoint(s3))    ##存在交集输出False

    输出结果:

    2.判断一个集合是否是另一个集合的子集

    s1 = {1,2}
    s2 = {3,5}
    s3 = {2}
    print(s2.issubset(s1))      ##判断的时候是利用for循环将集合中的元素逐个取出再进行比较
    print(s3.issubset(s1))

    输出结果:

    3.判断一个集合是否是另一个集合的父集

    s1 = {1,2}
    s2 = {3,5}
    s3 = {2}
    print(s1.issuperset(s2))
    print(s1.issuperset(s3))

    输出结果:

    4.对集合进行更新

    s1 = {1,2,'lee','123ds'}
    s2 = {3,5}
    print(s1.union(s2))     ##只是求并集,并没有对s1重新赋值
    print(s1)
    s1.update(s2)
    print(s1.update(s2))    ##对s1进行了重新赋值,与 s1 = s1.union(s2) 效果相同
    print(s1)

    输出结果:

    五、补充 

    1.定义不可变集合(普通集合可以增加or删除元素)

    s1 = frozenset('hello')   ##只能通过将可迭代对象转换为不可变集合
    s2 = frozenset(['hello',1,2,'12s'])
    print(s1)     ##生成的不可变集合和普通的格式也不同,会在集合外加上frozenset()
    print(s2)

    输出结果:

    2.可迭代对象去重的快捷方法—>将可迭代对象转换为集合后再转换回来

    li = [1,2,3,'1w','1w',1,2]     ##集合不能使用索引但是可以使用for循环进行遍历
    l =list(set(li))
    print(l)

    输出:

  • 相关阅读:
    .Net中的AOP系列之《方法执行前后——边界切面》
    【信息学奥赛一本通】题解目录
    7219:复杂的整数划分问题
    1039 数的划分
    7215:简单的整数划分问题
    大整数阶乘的计算
    大数阶乘的位数和精确值计算【转】
    Window.Open详解
    在asp.net中显示PDF的方法:
    位运算技巧
  • 原文地址:https://www.cnblogs.com/foever-lee/p/9991865.html
Copyright © 2020-2023  润新知