zoukankan      html  css  js  c++  java
  • Python 集合数据类型之一: set [学习 Python 必备基础知识][看此一篇就够了][创建set集合][访问set集合][删除set集合][增删set集合的元素][set集合间交并差运算]

    您的“关注”和“点赞”,是信任,是认可,是支持,是动力......

    如意见相佐,可留言。
    本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

    在这里插入图片描述

    1 set 集合概述

    目前有两种内置集合类型,setfrozenset(可参见博文《Python 集合数据类型之二: fronzenset》)。

    • set 类型:是可变的,其内容可以使用 add()remove() 这样的方法来改变。
      由于是可变类型,它没有哈希值,且不能被用作字典的或其他集合的元素

    • frozenset 类型:是不可变并且为 hashable ,其内容在被创建后不能再改变;
      因此它可以被用作字典的或其他集合的元素

    Python 中的 set 集合,将所有元素放在一对大括号 {} 中,相邻元素之间用 , 分隔。

    set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。

    set 集合中的元素都是唯一的,互不相同。并且元素个数没有限制。

    在同一集合中,只能存储不可变的数据类型,包括数字、字符串、元组;无法存储列表、set 集合、字典这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。

    举例如下所示:

    例一,在同一集合中,只能存储不可变的数据类型,包括数字、字符串、元组。

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}  # 可以存储整数、浮点数、布尔值、复数、字符串、元组
    print(type(set_demo1))
    

    运行结果:

    <class 'set'>
    

    在同一集合中,无法存储列表、set 集合、字典这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。

    例二,无法存储列表

    set_demo2 = {[1, 2, 3, 4]}  # 无法存储列表
    print(type(set_demo2))
    
    

    运行结果:

        set_demo2 = {[1, 2, 3, 4]}  # 无法存储列表
    TypeError: unhashable type: 'list'
    

    例三,无法存储 set 集合

    set_demo3 = {{1, 2, 3, 4}}  # 无法存储 set 集合
    print(type(set_demo3))
    
    

    运行结果:

        set_demo3 = {{1, 2, 3, 4}}  # 无法存储 set 集合
    TypeError: unhashable type: 'set'
    

    例四,无法存储字典

    set_demo4 = {{'Q': 'python', 'W': 'java'}}  # 无法存储字典
    print(type(set_demo4))
    
    

    运行结果:

        set_demo4 = {{'Q': 'python', 'W': 'java'}}  # 无法存储字典
    TypeError: unhashable type: 'dict'
    

    在同一集合中,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份。

    例五,set 集合中的元素都是唯一的,互不相同。

    set_demo1 = {11, 2.1, 11, True, 4 + 5j, '码农阿杰', (1, 2, 3), '码农阿杰'}
    print(set_demo1)
    
    

    运行结果:

    {True, 2.1, 11, (1, 2, 3), '码农阿杰', (4+5j)}
    

    2 Python 创建 set 集合

    2.1 使用 {} 创建

    直接使用 {} 创建 set 集合,并把创建好的 set 集合赋值给一个变量,便于以后的使用。

    语法格式如下所示:

    setname = {element1, element2, ..., elementn}
    

    对以上格式说明,

    • set:表示集合的名称。起名时既要符合 Python 命名规范,也要避免与 Python 内置函数重名。同时要“见名知其意”。
    • element1 - elementn:表示 set 集合元素,个数没有限制。

    举例如下所示:

    set_demo = {'微信公众号:', '码农阿杰'}
    
    print(type(set_demo))
    print(set_demo)
    
    

    运行结果:

    <class 'set'>
    {'微信公众号:', '码农阿杰'}
    

    2.2 使用 set() 函数创建集合

    使用 Python 的内置函数 set()创建集合。

    其实是将字符串、列表、元组、range 对象等可迭代对象转换成 set 集合。

    注意:如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {} 创建 set 集合,Python 解释器会将其视为一个空字典。

    使用语法格式如下所示:

    setname = set(iteration)
    

    对以上格式说明,

    • iteration:表示字符串、列表、元组、range 对象等可迭代对象。

    举例如下所示:
    例一,

    print(set('码农阿杰'))
    print(set([1, 2, 3, 4, 5]))
    print(set((1, 2, 3, 4, 5)))
    print(set(range(1, 6)))
    
    

    运行结果:

    {'码', '阿', '农', '杰'}
    {1, 2, 3, 4, 5}
    {1, 2, 3, 4, 5}
    {1, 2, 3, 4, 5}
    

    例二,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {} 创建 set 集合,Python 解释器会将其视为一个空字典。

    set_demo1 = {}
    set_demo2 = set()
    
    print(type(set_demo1))
    print(type(set_demo2))
    
    

    运行结果:

    <class 'dict'>
    <class 'set'>
    

    3 Python 访问 set 集合元素

    set 集合中的元素是无序的,因此无法使用索引(下标)访问元素。

    在 Python 中,访问 set 集合元素,通常使用循环结构(请参见博文《Python 循环结构详解》),将集合中的数据(元素)逐一读取出来。

    举例如下所示:

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    for i in set_demo1:
        print(i)
    
    

    运行结果:

    True
    2.1
    11
    (1, 2, 3)
    (4+5j)
    码农阿杰
    
    

    4 Python 删除 set 集合

    手动删除 set 集合,可以使用 del 关键字。

    举例如下所示:

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('删除前 set_demo1 = ', set_demo1)
    
    del set_demo1  # 使用 del 删除 set 集合
    
    print('删除后 set_demo1 = ', set_demo1)
    
    

    运行结果:

    删除前 set_demo1 =  {True, 2.1, 11, (1, 2, 3), '码农阿杰', (4+5j)}
    Traceback (most recent call last):
      File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 18, in <module>
        print('删除后 set_demo1 = ', set_demo1)
    NameError: name 'set_demo1' is not defined
    
    

    5 对 set 集合中元素的操作

    5.1 向 set 集合中添加元素

    向 set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现。

    注意:使用 add() 方法添加的元素,只能是不可变数据,包含数字、字符串、元组;不能添加列表、集合、字典这类可变的数据,否则 Python 解释器会报 TypeError 错误。

    使用语法格式如下所示:

    setname.add(element)
    

    对以上格式说明,

    • setname:表示要添加元素的 set 集合。
    • element:表示要添加到 set 集合中的元素。

    举例如下所示:

    例一,向 set 集合中添加的元素为字符串

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('添加前 set_demo1 =', set_demo1)
    set_demo1.add('https://blog.csdn.net/manongajie')  # 向 set 集合中添加元素
    print('添加后 set_demo1 =', set_demo1)
    
    

    运行结果:

    添加前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '码农阿杰', (4+5j)}
    添加后 set_demo1 = {True, 2.1, 'https://blog.csdn.net/manongajie', 11, (1, 2, 3), '码农阿杰', (4+5j)}
    

    例二,向 set 集合中添加的元素为列表

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('添加前 set_demo1 =', set_demo1)
    set_demo1.add([1, 2, 3, 4])
    print('添加后 set_demo1 =', set_demo1)
    
    

    运行结果:

    添加前 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '码农阿杰'}
    Traceback (most recent call last):
      File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 15, in <module>
        set_demo1.add([1, 2, 3, 4])
    TypeError: unhashable type: 'list'
    
    

    5.2 从 set 集合中删除元素

    删除 set 集合中的指定元素,可以使用 remove() 方法。

    注意:如果要删除的元素不在集合中,则此方法会抛出 KeyError 错误。此时,可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别在于当删除集合中元素失败时,此方法不会抛出任何错误。

    使用语法格式如下所示:

    setname.remove(element)
    

    对以上格式说明,

    • setname:要删除元素的 set 集合。
    • element:表示要删除的元素。

    举例如下所示:
    例一,

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('删除前 set_demo1 =', set_demo1)
    set_demo1.remove(11)
    print('删除后 set_demo1 =', set_demo1)
    
    

    运行结果:

    删除前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '码农阿杰', (4+5j)}
    删除后 set_demo1 = {True, 2.1, (1, 2, 3), '码农阿杰', (4+5j)}
    

    例二,使用 remove() 方法删除 set 集合中不存在的元素,会报错

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('删除前 set_demo1 =', set_demo1)
    set_demo1.remove('阿杰')
    print('删除后 set_demo1 =', set_demo1)
    
    

    运行结果:

    删除前 set_demo1 = {True, 2.1, 11, (1, 2, 3), '码农阿杰', (4+5j)}
    Traceback (most recent call last):
      File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 15, in <module>
        set_demo1.remove('阿杰')
    KeyError: '阿杰'
    
    

    例三,使用 discard() 方法删除 set 集合中不存在的元素,不会报错

    set_demo1 = {11, 2.1, True, 4 + 5j, '码农阿杰', (1, 2, 3)}
    
    print('删除前 set_demo1 =', set_demo1)
    set_demo1.discard('阿杰')
    print('删除后 set_demo1 =', set_demo1)
    
    

    运行结果:

    删除前 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '码农阿杰'}
    删除后 set_demo1 = {True, 2.1, 11, (1, 2, 3), (4+5j), '码农阿杰'}
    

    6 Python set 集合之间的运算

    6.1 交集运算

    set 集合间的交集运算:取两集合公共的元素。
    运算符位:&

    举例如下所示:

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    
    print(set1 & set2)
    
    

    运行结果:

    {4, 5}
    

    6.2 并集运算

    set 集合间的并集运算:取两集合全部的元素。
    运算符位:|

    举例如下所示:

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    
    print(set1 | set2)
    
    

    运行结果:

    {1, 2, 3, 4, 5, 6, 7, 8}
    

    6.3 差集运算

    set 集合间的差集运算:取一个集合(被减数集合)中另一个集合没有的元素。
    运算符位:-

    举例如下所示:

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    
    print('set1 - set2 =', set1 - set2)
    print('set2 - set1 =', set2 - set1)
    
    

    运行结果:

    set1 - set2 = {1, 2, 3}
    set2 - set1 = {8, 6, 7}
    

    6.4 对称差集运算

    set 集合间的对称差集运算:取集合 A 和 B 中不属于 A&B 的元素。
    运算符位:^

    举例如下所示:

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    
    print(set1 ^ set2)
    
    

    运行结果:

    {1, 2, 3, 6, 7, 8}
    

    7 set 集合常用方法

    请参见博文 《Python set 集合常用方法详解》

    【文章其它地址】

    微信公众号:码农阿杰

    CSDN 博客

    【参考资料】

    Python 官网

    Python 3.8.2 documentation

  • 相关阅读:
    pm2部署node应用
    koa源码分析
    将vim配置成一个轻量的IDE开发工具
    私有npm下载资源
    nodejs的会话总结
    redis---安全设置
    Lua----注意事项
    Leetcode538.-Convert BST to Greater Tree-Easy
    Leetcode 230-Kth Smallest Element in a BST-Medium
    Leetcode669-Trim a Binary Search Tree-Easy
  • 原文地址:https://www.cnblogs.com/manongajie/p/12925830.html
Copyright © 2011-2022 走看看