zoukankan      html  css  js  c++  java
  • python 集合

    1.集合

    集合是一个无序不重复元素的集。

    集合中的元素必须是不可变类型

     

    2.创建集合

    创建【空集合】:one_set = set()  # 注意:只能用set()。{}是空字典的创建方式。

    创建非空集合:one_set = {“orange”, “banaba”, “pear”, “banana”}  # 创建集合时,会自动删除重复的元素。

    所以,如果这个时候打印one_set ,可能会输出:{'banana', 'pear', 'orange'}。

    由于set是无序的,每一次打印出来的元素个数跟值是一致的,但位置未必一致。

    将【列表】转化为集合:

     

    将【元组】转化为集合:

        

    将【字典】转化为集合:

    ☆集合最主要的两个特征就是:去除重复,运算

     

    3.集合运算

     数学表达式:

    one_set = {"苹果", "橘子", "香蕉", "凤梨", "香蕉"}
    two_set = set(["苹果", "香蕉", "樱桃", "杏子", "柚子"])
    print(one_set, two_set, sep=" *** ")
    print(f"one_set与two_set的交集是{one_set&two_set}")
    print(f"one_set与two_set的并集是{one_set|two_set}")
    print(f"one_set对two_set的差集是{one_set-two_set}")
    print(f"two_set与one_set的差集是{two_set-one_set}")
    {'苹果', '橘子', '凤梨', '香蕉'} *** {'杏子', '柚子', '樱桃', '香蕉', '苹果'}
    one_set与two_set的交集是{'苹果', '香蕉'}
    one_set与two_set的并集是{'杏子', '橘子', '凤梨', '柚子', '樱桃', '香蕉', '苹果'}
    one_set对two_set的差集是{'橘子', '凤梨'}
    two_set与one_set的差集是{'杏子', '柚子', '樱桃'}
    

      集合方法:

    one_set = {"苹果", "橘子", "香蕉", "凤梨", "香蕉"}
    two_set = set(["苹果", "香蕉", "樱桃", "杏子", "柚子"])
    print(one_set, two_set, sep=" *** ")
    print(f"one_set与two_set的交集是{one_set.intersection(two_set)}")
    print(f"one_set与two_set的并集是{one_set.union(two_set)}")
    print(f"one_set对two_set的差集是{one_set.difference(two_set)}")
    print(f"two_set与one_set的差集是{two_set.difference(one_set)}")
    
    {'香蕉', '凤梨', '苹果', '橘子'} *** {'香蕉', '苹果', '杏子', '柚子', '樱桃'}
    one_set与two_set的交集是{'香蕉', '苹果'}
    one_set与two_set的并集是{'橘子', '香蕉', '苹果', '杏子', '凤梨', '柚子', '樱桃'}
    one_set对two_set的差集是{'凤梨', '橘子'}
    two_set与one_set的差集是{'樱桃', '杏子', '柚子'}
    

      对称差集:

    print(f"两集合的对称差集是{one_set.symmetric_difference(two_set)}")
    print(f"两集合的对称差集是{two_set.symmetric_difference(one_set)}")
    两集合的对称差集是{'凤梨', '樱桃', '杏子', '橘子', '柚子'}
    两集合的对称差集是{'樱桃', '杏子', '橘子', '柚子', '凤梨'}
    

      注意点:

    # 注意:
    # intersection,difference,symmetric_difference
    # 与
    # intersection_update,difference_update,symmetric_difference_update
    # 的主要区别在于:
    # 上面的方法是返回一个新的集合,
    # 下面的方法是在原始集合的基础上进行操作,没有返回值
    three_set = one_set.intersection(two_set)
    one_set.intersection_update(two_set)
    
    three_set = one_set.difference(two_set)
    one_set.difference_update(two_set)
    
    one_set.symmetric_difference(two_set)
    one_set.symmetric_difference_update(two_set)
    

      

     4.集合添加、删除元素

    # 添加一个元素
    one_set.add("西瓜")
    
    # 添加多个元素(列表,元组,字典等)
    # 多个元素之间用逗号隔开
    one_set.update(two_set, ("榴莲", "荔枝"))
    
    # 删除指定元素discard/remove
    # 随意删除一个元素pop
    # 当指定元素不存在时,discard不会报错,remove会报错
    one_set.discard("西瓜")
    one_set.remove("苹果")
    one_set.pop()
    
    # 清空集合
    one_set.clear()
    

    5.父集、子集的判断 

    # A.issuperset(B)   判断A是否是B的父集,是True,否False
    # A.issubset(B)     判断A是否是B的子集,是True,否False
    # A.isdisjoint(B)   判断两个集合是否包含相同的元素,如果包含False,不包含True  ☆这里容易搞反哦
    one_set = {1, 3, 5, 7, 9}
    two_set = {3, 5, 7}
    print(one_set.issuperset(two_set))  # True
    print(two_set.issubset(one_set))    # True
    print(one_set.isdisjoint(two_set))  # False
  • 相关阅读:
    递归初级——第39级台阶
    排序——快速排序(尾递归优化)
    排序——快速排序(优化小数组时的排序方案 )
    排序——快速排序(三数取中法和优化不必要交换)
    排序——归并排序(递归实现+迭代实现 )
    超详细Hexo+Github博客搭建小白教程
    每日算法系列【LeetCode 1031】两个非重叠子数组的最大和
    每日算法系列【LeetCode 330】按要求补齐数组
    5W2H | 关于写博客的七点反思
    每日算法系列【LeetCode 124】二叉树中的最大路径和
  • 原文地址:https://www.cnblogs.com/jszfy/p/11161388.html
Copyright © 2011-2022 走看看