zoukankan      html  css  js  c++  java
  • Python数据类型-集合(set)

    1、创建集合

    集合的创建不同于前两种数据结构。

    集合通过set(iterable)方法创建,参数iterable为可迭代对象。

    示例代码:

    s1 = set('好好学习天天想上')  # 将字符串分解为单个字符,作为集合的元素创建集合
    s2 = set(('好好', '学习', '天天', '想上'))  # 将元组分解为单个元素,作为集合元素创建集合
    s3 = set(['好好', '学习', '天天', '想上'])  # 将列表分解为单个元素,作为集合元素创建集合
    
    
    print (s1)  # 显示输出结果为:{'好', '习', '上', '天', '想', '学'}
    print (s2)  # 显示输出结果为:{'好好', '想上', '学习', '天天'}
    print (s3)  # 显示输出结果为:{'好好', '想上', '学习', '天天'}

    通过上方示例,大家能够看出:

    • 集合可以通过可迭代对象(字符串、元组、列表等)进行创建;
    • 集合中的元素不可重复;
    • 集合中的元素无序排列。

    2、添加元素

    集合添加元素的方法有两种。

    添加单个元素:使用add(element)函数,参数element为集合允许添加的元素(例如数字、字符串、元组等)。

    添加多个元素:使用update(iterable)函数,参数iterable为可迭代对象。

    示例代码:

    # 创建集合
    s1 = set('123')
    s2 = set('123')
    s3 = set('abc')
    
    # 添加单个元素
    s1.add('4')
    
    # 添加多个元素
    s2.update(['4','5','6'])  # 添加列表到集合,列表元素会被分解为单个元素后添加到集合
    s3.update('de')  # 添加字符串到集合,字符串会被分解为单个元素后添加到集合
    
    # 显示输出
    print (s1)  # 显示输出结果为:{'4', '3', '1', '2'}
    print (s2)  # 显示输出结果为:{'4', '2', '6', '5', '3', '1'}
    print (s3)  # 显示输出结果为:{'c', 'b', 'd', 'e', 'a'}
    
    #注意:因为集合元素是无序的,大家在测试以上代码时,显示输出的结果与上方结果,可能在顺序上不一致。

    3、删除元素

    集合删除元素的方法有两种。

    第一种:使用remove(element)方法删除指定元素,参数element为需要删除的元素。

    第二种:使用discard(element)方法删除指定元素,参数element为需要删除的元素。

    示例代码:

    # 创建集合
    s1 = set(['Python','Java','C','C++','C#'])
    s2 = set(['Python','Java','C','C++','C#'])
    
    # 删除元素
    s1.remove('C++')
    s2.discard('C++')
    
    # 显示输出
    print (s1)  # 显示输出结果为:{'C', 'Python', 'Java', 'C#'}
    print (s2)  # 显示输出结果为:{'C', 'Python', 'Java', 'C#'}

    从上方示例中,大家能够看到remove()和discard()的作用是一样的。

    不过,这两个方法是有区别的。

    当集合中不存在这两个方法参数中填入的元素时,remove()方法会抛出异常,而discard()方法则没有任何影响。

    4、取出元素

    集合支持pop()方法取出元素。

    示例代码:

    # 创建集合
    s = set(['Python','Java','C','C++','C#'])
    
    # 显示输出
    print (s)  # 显示输出结果为:{'Python', 'C#', 'C++', 'Java', 'C'}
    print (s.pop()) # 取出集合元素,显示输出结果为:Python
    print (s)  # 显示输出结果为:{'C#', 'C++', 'Java', 'C'}

    5、清空集合

    集合支持clear()方法进行清空。

    示例代码:

    # 创建集合
    s = set(['Python','Java','C','C++','C#'])
    
    # 清空集合
    s.clear() 
    
    # 显示输出
    print (s)  # 显示输出结果为:set()

    6、交集/并集/补集/差集

    首先我们来看张图,理解交集、并集、补集、差集的概念。

    假设有集合A{1,2,3}和B{3,4,5}。

    交集:A和B中相同部分的内容,{3}。

    并集:A和B去重后的全部内容,{1,2,3,4,5}。

    补集:A去除与B相交部分后的内容,{1,2}。

    差集:A和B不相交部分的全部内容,{1,2,4,5}。

    示例代码:

    # 创建集合
    s1 = set('Python')
    s2 = set('PyCharm')
    
    # 交集操作:获取两个集合中共有元素。
    print (s1 & s2)  # 显示输出结果为:{'y', 'P', 'h'}
    print (s1.intersection(s2))  # 显示输出结果为:{'y', 'P', 'h'}
    
    # 并集操作:获取两个集合去除重复元素后的全部元素。
    print (s1 | s2)  # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
    print (s1.union(s2))  # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
    
    # 补集操作:获取当前集合去除与另一集合交集元素后的全部元素。
    print (s1 - s2)  # 显示输出结果为:{'o', 't', 'n'}
    print (s1.difference(s2))  # 显示输出结果为:{'o', 't', 'n'}
    print (s2 - s1)  # 显示输出结果为:{'m', 'a', 'r', 'C'}
    print (s2.difference(s1))  # 显示输出结果为:{'m', 'a', 'r', 'C'}
    
    # 差集操作:获取两个集合去除交集元素后的全部元素。
    print (s1 ^ s2)  # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
    print (s1.symmetric_difference(s2))  # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}

    以上操作中,对集合本身内容并无影响,大家可以在执行以上代码后,继续显示输出s1和s2的内容,能够看到没有任何变化。

    接下来,我们再来看几个方法,这些方法会改变集合内容。

    第一种:difference_update(set) 函数,能够将当前集合和指定集合进行补集运算,并将当前集合内容更新为运算结果。

    示例代码:

    s1=set('1234')
    s2=set('456')
    
    s1.difference(s2) # 该操作对s1内容无影响
    print (s1) # s1无变化,显示输出结果为:{'3', '4', '2', '1'}
    s1.difference_update(s2) # 更新集合s1的内容为s1-s2后的结果
    print (s1) # s1内容被更新,显示输出结果为:{'3', '2', '1'}

    第二种:intersection_update(set) 函数,能够将当前集合和指定集合进行交集运算,并将当前集合内容更新为运算结果。

    示例代码:

    s1=set('1234')
    s2=set('456')
    
    s1.intersection_update(s2) # 更新集合s1的内容为s1 & s2后的结果
    print (s1) # s1内容被更新,显示输出结果为:{'4'}

    第三种:symmetric_difference_update(set) 函数,能够将当前集合和指定集合进行差集运算,并将当前集合内容更新为运算结果。

    示例代码:

    s1 = set('1234')
    s2 = set('456')
    
    s1.symmetric_difference_update(s2)  # 更新集合s1的内容为s1 ^ s2后的结果
    print(s1)  # s1内容被更新,显示输出结果为:{'6', '3', '2', '5', '1'}

    7、成员关系

    Python中提供了一些方法,让我们能够判断一个集合中是否包含某一元素;

    也可以判断一个集合是否另一个集合的子集或超集。

    还可以判断一个集合与另一个集合是否没有交集。

    在之前我们接触过“in”这操作符,可以用来判断操作符前方的值是否被后方的序列包含(成员关系)。

    另外,我们还可以使用“not in”,判断操作符前方的值是否未被后方的序列包含(非成员关系)。

    在集合中,我们同样可以使用这两个操作符。

    另外,我们还可以通过以下方法,判断一个集合是否另外一个集合的子集或超集以及没有交集。

    isdisjoint(set):可以判断集合是否与指定集合不存在交集,参数set为集合;如果成立返回结果为True,否则为False。

    issubset(set):可以判断集合是否指定集合的子集,参数set为集合;如果成立返回结果为True,否则为False。

    issuperset(set):可以判断集合是否指定集合的超集,参数set为集合;如果成立返回结果为True,否则为False。

    示例代码:

    s1 = set('好好学习')
    s2 = set('天天想上')
    s3 = set('好好学习天天想上')
    
    print ('好' in s1) # 显示输出结果为:True
    print ('好' not in s2) # 显示输出结果为:True
    print (s1.isdisjoint(s2))  # 显示输出结果为:True
    print (s1.issubset(s3))  # 显示输出结果为:True
    print (s3.issuperset(s1))  # 显示输出结果为:True

    8、复制集合

    使用copy()方法能够对集合进行复制。

    大家通过下方代码即可理解复制的用途。

    示例代码:

    a = set('小楼一夜听春语')  # 创建集合存入变量a
    b = a  # 创建变量b引用变量a的集合
    c = a.copy()  # 创建变量c复制变量a的值
    print (a)  # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
    print (b)  # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
    print (c)  # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
    
    a.remove('一')  # 删除变量a中集合的一个元素
    print (a)  # 变量a发生改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小'}
    print (b)  # 变量b因为引用变量a,同样发生改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小'}
    print (c)  # 变量c没有改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}

    如果还不能够理解,我们可以看下面这张图。

    代码中,b = a实际上是将b指向了a的内容,所以当a的内容发生变化时,b同步发生了变化。

    而c = a.copy()则是将a的内容真正进行了复制,不再受a的变化影响。

    9、其他

    集合也支持len()方法进行元素数量的获取,也支持max()方法和min方法获取集合中的最大元素与最小元素,在此不再赘述

  • 相关阅读:
    ASP.NET实现文件下载的功能
    优先队列的使用
    关于CSS设置样式的一点建议
    ASP.NET后台弹出消息的方法
    创建漂亮的 CSS 按钮的 10 个代码片段(转载)
    2020高考游记
    最后的OI(HAOI2020游记)
    2020 2 2 20 20
    祭最后的亡魂
    一个感人至深的故事
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9577560.html
Copyright © 2011-2022 走看看