• Python数据容器:set(集合)


    1. my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast',
    2. 'itheima', 'itcas', 'best']
    3. New_set = set()
    4. for element in my_list:
    5. New_set.add(element)
    6. print(f"最终得到的集合为:{New_set}")
    7. # 输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast', '黑马程序员', '传智播客'}

    1、集合(set)存在的意义(为什么要有集合?)

    通过特性来分析:
    列表可修改、支持重复元素且有序;元组、字符串不可修改、支持重复元素且有序。

    以上的数据容器都支持重复元素,但是如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。

    集合,最主要的特点是:不支持元素的重复(即使输入的元素重复,也会自带去重功能)并且内容无序。如果定义了一个内部元素有重复的集合,输出它,会发现它已经自动去重了。

    2、集合的定义

    定义集合变量 变量名称 = {元素1,元素2,元素3……}

    定义空集合  变量名称 = set(())

    列表:[]
    元组:()
    字符串:""
    集合:{}

     3、集合不是序列

    当说到集合不是序列时,意味着集合与序列具有不同的特性和行为。序列是指包含有序元素的数据结构,例如列表、元组和字符串。序列具有以下特性:

            1. 有序性:序列中的元素按一定顺序排列,并且可以通过索引访问元素。
            2. 可索引性:可以使用索引来访问指定位置的元素。
            3. 可切片性:可以通过切片操作获取序列的子序列。
            4. 可迭代性:可以使用迭代器逐个访问序列中的元素。
            5. 元素重复性:序列允许包含重复的元素。

    相比之下,集合是无序的,不包含重复元素的数据结构。集合具有以下特性:

            1. 无序性:集合中的元素没有固定的顺序,无法通过索引访问元素。
            2. 不可索引性:集合中的元素无法通过索引来访问,因为集合没有定义元素的顺序。
            3. 不可切片性:集合不支持切片操作,因为无序性导致无法定义子集合的范围。
            4. 不可迭代性:集合不是可迭代对象,无法使用迭代器逐个访问元素。
            5. 唯一性:集合中的元素是唯一的,不允许包含重复元素。

    总之,虽然集合在某些方面与序列有相似之处,但它们在行为和特性上存在明显的差异。

     4、集合常用操作

    操作语法结果
    下标索引访问集合不支持该操作集合不支持该操作(因为集合是乱序的,且集合不是序列)
    遍历集合不支持while循环,但是支持for循环得到集合中的元素
    添加新元素集合.add()集合本身被修改,添加了新元素
    移除元素
    (将指定元素,从集合内移除)
    集合.remove(元素)集合本身被修改,移除了元素
    从集合中随机取出一个元素集合.pop()

    会得到一个元素的结果

    同时集合本身被修改,元素被移除

    清空集合集合.clear()集合被清空
    取出2个集合的差集
    (只有集合有该操作)
    集合3 = 集合1.difference(集合2)

    取出集合1和集合2的差集(集合1有,而集合2没有的)

    得到一个新的集合,集合1和集合2不变

    消除2个集合的差集集合3 = 集合1.difference _update(集合2)

    集合1被修改,集合2不变
    集合1内与集合2相同的元素被删除

    集合3就是集合1

    2个集合合并

    将集合1和集合2组合成新集合

    集合3 = 集合1.unior(集合2)得到新集合, 集合1和集合2不变
    求集合的长度len(集合)得到集合的长度

    示例代码:
     

    1. my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"}
    2. my_set_empty = set()
    3. print(my_set)
    4. print(my_set_empty)
    5. """
    6. 输出结果:
    7. {'4', '2', '1', '3', '5'} 
    8. set()
    9. """
    10. # 集合添加元素 add()
    11. my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"}
    12. my_set.add("Python")
    13. print(f"增加元素后的集合为{my_set}")
    14. # python 的位置是不固定的。
    15. # 输出:增加元素后的集合为{'4', '5', '1', 'Python', '2', '3'}
    16. # 集合移除元素 remove()
    17. my_set.remove("1")
    18. print(f"移除元素后的集合为{my_set}")
    19. # 输出:移除元素后的集合为{'4', '5', 'Python', '2', '3'}
    20. # 集合随机移除一个元素
    21. element = my_set.pop() #element是被移除的元素
    22. print(f"随机移除一个元素后,集合为{my_set}")
    23. print(f"被随机移除的元素是:{element}")
    24. """
    25. 输出结果:
    26. 随机移除一个元素后,集合为{'Python', '5', '4', '2'}
    27. 被随机移除的元素是:3
    28. """
    29. # 集合的差集
    30. set1 = {"1", "2", "3", "4", "5", "Hello", "World"}
    31. set2 = {"1", "2", "3", "4", "5"}
    32. set3 = set1.difference(set2)
    33. print(f"集合1与集合2的差集为{set3}")
    34. # 输出:集合1与集合2的差集为{'World', 'Hello'}
    35. set4 = {"1", "2", "3", "4", "5"}
    36. set5 = {"1", "2", "3", "4", "5", "Hello", "World"}
    37. set6 = set4.difference(set5)
    38. print(f"集合5与集合6的差集为{set6}")
    39. # 输出:集合5与集合6的差集为set() (表明差集是空集)
    40. # 消除2个集合的差集
    41. set1.difference_update(set2)
    42. print(f"消除2个集合的差集后的集合1为:{set1}")
    43. # 输出:消除2个集合的差集后的集合1为:{'World', 'Hello'}
    44. # 集合合并
    45. print(f"合并前的set1为{set1},合并前的my_set为{my_set}")
    46. set7 = set1.union(my_set)
    47. print(f"合并后的集合为{set7}")
    48. '''
    49. 输出:
    50. 合并前的set1为{'World', 'Hello'},合并前的my_set为{'2', 'Python', '4', '5'}
    51. 合并后的集合为{'Python', 'World', 'Hello', '2', '4', '5'}
    52. '''
    53. # 遍历集合
    54. print(f"my_set中的元素分别为", end=": ")
    55. for element in my_set:
    56. print(element,end=" ")
    57. # 输出:my_set中的元素分别为: Python 3 4 5

    5、代码练习——信息去重

    有如下列表对象:
    my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast', 'itheima', 'itcas',  'best']
    请:
    1、定义一个空集合
    2、通过for循环追历列表
    3、在for循环中将列表的元素添加至集合
    4、最终得到元素去重后的集合对象,并打印输出

    1. my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima',
    2. 'itcast','itheima', 'itcas', 'best']
    3. New_set = set()
    4. # 其实这一步不用for循环,直接转换就可以实现
    5. for element in my_list:
    6. New_set.add(element)
    7. print(f"最终得到的集合为:{New_set}")
    8. """
    9. 输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast',
    10. '黑马程序员', '传智播客'}
    11. """
  • 相关阅读:
    控件交互的优劣势--自动窗帘系统
    微信关于权重条件,连续下降积分的原因有以下这些
    运行手写数字识别例程出现cuDNN Error: cudnnConvolutionForward failed
    Kafka Stream 学习笔记-5 process api
    数字图像处理-图像压缩
    Allegro如何打盲埋孔操作指导
    vue3学习笔记(2)
    Java集成腾讯云OCR身份证识别接口
    EEMD分解如何对IMF分量进行显著性检验?
    偏差与方差
  • 原文地址:https://blog.csdn.net/weixin_48060069/article/details/132357693