• python set集合(16)


        在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set。

     
    set

    一.set集合简介

        python set集合使用大括号 { }表示,与字典dict不同的是set集合并没有key/value键值对,主要有以下两个特点:

        1.元素不允许重复

        2.set 不记录元素的添加顺序,即是无序的,和字典类似

    # !usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    @Author:何以解忧
    @Blog(个人博客地址): shuopython.com
    @WeChat Official Account(微信公众号):猿说python
    @Github:www.github.com
     
    @File:python_set.py
    @Time:2019/11/09 21:25
     
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    """
     
    # 创建一个空集合set
    set_a = set()
    # 打印集合set
    print(set_a)
    # 查看类型
    print(type(set_a))
    print("***"*20)
     
    # 创建一个集合
    set_b = {"猿说python",False}
    print(type(set_b))
    print(set_b)
    print("***"*20)
     
    # 创建一个字典
    dict_b = {"name":"猿说python","url":"www.shuopython.com"}
    print(type(dict_b))
    print(dict_b)

    输出结果:

        代码分析:观察上面代码,虽然字典dict 和 集合set 都是由{}构成,注意字典由键值对key/value构成,而集合确是由一个一个数据构成,和列表的元素类似!

     
     
    套路
     

    二.set集合常用函数

        add()  — 向 set 集合中添加元素;

        remove() — 删除元素,如果集合中不包含被删除的元素,remove() 方法会报出 KeyError 异常;

        discard()  — 删除元素,如果集合中不包含被删除的元素,不会有任何提示或者 异常;

        clear() —  就是清空白 set 集合;

        copy() — 拷贝一个集合;

        difference() — 返回多个集合的差集;

        difference_update() — 移除集合中的元素,该元素在指定的集合也存在;

        intersection() — 返回集合的交集,不改变集合本身,而是返回两个集合的交集;

        intersection_update() — 返回集合的交集,会通过交集运算改变第一个集合;

        isdisjoint() — 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False;

        issubset() — 判断指定集合是否为该方法参数集合的子集;

         issuperset() — 判断该方法的参数集合是否为指定集合的子集;

        pop() — 随机移除元素;

        symmetric_difference() — 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中;

        union() — 返回两个集合的并集;

        update() — 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略;

     
    # 使用花括号构建set集合
    c = {'乔峰',"段誉","虚竹","天龙八部","射雕英雄传"}
    # 添加元素
    c.add("天山姥姥")
    c.add(6)
    print("c集合的元素个数为:" , len(c))
    print(c)
    # 删除指定元素
    c.remove("天山姥姥")
    print(c)
    print("c集合的元素个数为:" , len(c))
    print("***"*20)
     
     
    # 判断是否包含指定字符串
    print("c集合是否包含'乔峰'字符串:" , ("乔峰" in c)) # 输出True
    print("***"*20)
     
    # 使用set()函数(构造器)来创建set集合
    movies = set()
    movies.add("天龙八部")
    movies.add("射雕英雄传")
    print("movies集合的元素:" , movies)
    # issubset()方法判断是否为子集合
    print("movies集合是否为c的子集合?", movies.issubset(c)) # 输出False
     
    # issuperset()方法判断是否为父集合
    # issubset和issuperset其实就是倒过来判断
    print("c集合是否完全包含books集合?", c.issuperset(movies)) # 输出False
    # 用c集合减去books集合里的元素,不改变c集合本身
    result1 = c - movies
    print(result1)
     
    # difference()方法也是对集合做减法,与用-执行运算的效果完全一样
    result2 = c.difference(movies)
    print(result2)
     
    # 用c集合减去books集合里的元素,改变c集合本身
    c.difference_update(movies)
    print("c集合的元素:" , c)
     
    # 删除c集合里的所有元素
    c.clear()
    print("c集合的元素:" , c)
    print("***"*20)
     
    # 直接创建包含元素的集合
    d = {"python面向对象", 'python基础', 'python爬虫'}
    print("d集合的元素:" , d)
     
    # intersection()方法也是获取两个集合的交集,与用&执行运算的效果完全一样
    inter2 = d.intersection(movies)
    print(inter2)
    # 计算两个集合的交集,改变d集合本身
    d.intersection_update(movies)
    print("d集合的元素:" , d)
    print("***"*20)
     
    # 将range对象包装成set集合
    e = set(range(5))
    f = set(range(3, 7))
    print("e集合的元素:" , e)
    print("f集合的元素:" , f)
     
    # 计算两个集合的并集,不改变e集合本身
    un = e.union(f)
    print('e和f执行并集的结果:', un)
    # 计算两个集合的并集,改变e集合本身
    e.update(f)
    print('e集合的元素:', e)

    输出:

     

     

     
     
    can you
     
     

    三.set集合运算符

        <=:相当于调用 issubset() 方法,判断前面的 set 集合是否为后面的 set 集合的子集合。

        >=:相当于调用 issuperset() 方法,判断前面的 set 集合是否为后面的 set 集合的父集合。

        –:相当于调用 difference() 方法,用前面的 set 集合减去后面的 set 集合的元素。

        &:相当于调用 intersection() 方法,用于获取两个 set 集舍的交集。

        ^:计算两个集合异或的结果,就是用两个集合的并集减去交集的元素。

    输出结果:

     

    ojbk

     

    猜你喜欢:

        1.python列表推导式

        2.python字典推导式

        3.python 匿名函数lambda

        4.python map函数

     

        转载请注明:猿说Python » python set集合

     

    技术交流、商务合作请直接联系博主
    扫码或搜索:猿说python
    python教程公众号
    猿说python
    微信公众号 扫一扫关注
  • 相关阅读:
    [leetcode] 18. 四数之和
    [leetcode] 17. 电话号码的字母组合
    [leetcode] 16. 最接近的三数之和
    [leetcode] 15. 三数之和
    [leetcode] 14. 最长公共前缀
    [leetcode] 13. 罗马数字转整数
    [leetcode] 12. 整数转罗马数字
    [leetcode] 11.盛最多水的容器
    分布式系统中的缓存——笔记整理
    图解HTTP
  • 原文地址:https://www.cnblogs.com/shuopython/p/12088366.html
Copyright © 2020-2023  润新知