zoukankan      html  css  js  c++  java
  • Python集合及其运算

    集合(set)

    集合是由不同可hash的值组成的,里面所有的值都是唯一的,也是无序的

    集合的创建

    >>>set_test = {"name", "age", "hometown"}
    ##  把值放入{ }中
    
    >>>lis = ("name", "age", "hometown")
    >>>set_test = set(lis)
    >>> set_test
    {'name', 'age', 'hometown'}
    ##利用set()函数,把其他类型转换为set
    
    >>> list_test = ["name", "age", "hometown"]
    >>> set_test = frozenset(list_test)
    >>> set_test
    frozenset({'name', 'age', 'hometown'})
    ##利用frozenset()函数可以创造一个set,并把它放到元组里面
    

    集合的操作

    • add(self, *args, **kwargs)

      添加值到集合里面

      >>> set_test
      {'name', 'age', 'hometown'}
      >>> set_test.add("hobby")
      >>> set_test
      {'name', 'age', 'hobby', 'hometown'}
      
    • clear(self, *args, **kwargs)

      清空集合

    • copy(self, *args, **kwargs)

      浅拷贝

    • discard(self, *args, **kwargs)

      删除某值,没有时不会报错

      >>> set_test
      {'name', 'age', 'hobby', 'hometown'}
      >>> set_test.discard("hobby")
      >>> set_test
      {'name', 'age', 'hometown'}
      
    • pop(self, *args, **kwargs)

      当集合是由列表和元组组成时,set.pop()是从左边删除元素的,并且可以得到被删除的值

      >>> set_test
      {'name', 'age', 'hometown'}
      >>> set_test.pop()
      'name'
      >>> set_test.pop()
      'age'
      
    • remove(self, *args, **kwargs)

      删除某值,但是如果没有的话,就会报错

      >>> set_test = {'name', 'age', 'hometown'}
      >>> set_test.remove("hometown")
      >>> set_test
      {'name', 'age'}
      
    • update(self, *args, **kwargs)

      更新值,可以在set里面添加多个值

      >>> set_test = {"Jack", "Mark", "Ada"}
      >>> set_test.update(["Jewish", "Obanma", "Anna"])
      >>> print(set_test)
      {'Obanma', 'Mark', 'Jack', 'Anna', 'Ada', 'Jewish'}
      

    集合的运算

    • 求交集

      >>> set_test1 = {"YuanMing", "Hermaeus", "Chenglong", "Kelan"}
      >>> set_test2 = {"YuanMing", "Hermaeus", "ZhangJie","Jack"}
      
      >>> test_result = set_test1.intersection(set_test2)
      >>> print(test_result)
      {'YuanMing', 'Hermaeus'}
      
      >>> test_result = set_test1&set_test2
      >>> print(test_result)
      {'YuanMing', 'Hermaeus'}
      
    • 求并集

      >>> set_test1 = {"YuanMing", "Hermaeus", "Chenglong", "Kelan"}
      >>> set_test2 = {"YuanMing", "Hermaeus", "ZhangJie","Jack"}
      
      >>> test_result = set_test1.union(set_test2)
      >>> print(test_result)
      {'Kelan', 'YuanMing', 'ZhangJie', 'Jack', 'Hermaeus', 'Chenglong'}
      
      >>> test_result = set_test1|set_test2
      >>> print(test_result)
      {'Kelan', 'YuanMing', 'ZhangJie', 'Jack', 'Hermaeus', 'Chenglong'}
      
    • 求差集

      >>> set_test1 = {"YuanMing", "Hermaeus", "Chenglong", "Kelan"}
      >>> set_test2 = {"YuanMing", "Hermaeus", "ZhangJie","Jack"}
      
      >>> test_result = set_test1.difference(set_test2)
      >>> test_result1 = set_test1.difference(set_test2)
      >>> print(test_result1)
      {'Kelan', 'Chenglong'}
      
      >>> test_result1 = set_test1-set_test2
      >>> print(test_result1)
      {'Kelan', 'Chenglong'}
      
      >>> test_result2 = set_test2.difference(set_test1)
      >>> print(test_result2)
      {'ZhangJie', 'Jack'}
      
      >>> test_result2 = set_test2-set_test1
      >>> print(test_result2)
      {'ZhangJie', 'Jack'}
      
    • 求交叉补集

      >>> set_test1 = {"YuanMing", "Hermaeus", "Chenglong", "Kelan"}
      >>> set_test2 = {"YuanMing", "Hermaeus", "ZhangJie","Jack"}
      >>> test_result = set_test1.symmetric_difference(set_test2)
      >>> print(test_result)
      {'ZhangJie', 'Jack', 'Kelan', 'Chenglong'}
      >>> test_result = set_test1^set_test2
      >>> print(test_result)
      {'ZhangJie', 'Jack', 'Kelan', 'Chenglong'}
      
    • 求集赋值

      • symmetric_difference_update(self, *args, **kwargs)

        >>> set_test1 = {"Jack", "Mark", "Devid"}
        >>> set_test2 = {"Jack", "Marish", "Good"}
        
        >>> set_test1.symmetric_update(set_test2)
        >>> set_test1.symmetric_difference_update(set_test2)  ## 把得到值赋予set_test1
        >>> set_test1, set_test2
        ({'Good', 'Marish', 'Devid', 'Mark'}, {'Good', 'Jack', 'Marish'})
        
        >>> set_test1 ^= set_test2			 
        >>> set_test1			 
        {'Good', 'Marish', 'Devid', 'Mark'}
        
      • intersection_update(self, *args, **kwargs)

        >>> set_test1 = {"Jack", "Mark", "Devid"}
        >>> set_test2 = {"Jack", "Marish", "Good"}
        
        >>> set_test1.intersection_update(set_test2)  ##把得到的值赋予set_test1
        >>> set_test1, set_test2
        ({'Jack'}, {'Good', 'Jack', 'Marish'})
        
        >>> set_test1 &= set_test2			 
        >>> set_test1			 
        {'Jack'}
        
      • difference_update(self, *args, **kwargs)

        >>> set_test1 = {"Jack", "Mark", "Devid"}
        >>> set_test2 = {"Jack", "Marish", "Good"}
        
        >>> set_test1.difference_update(set_test2)
        >>> set_test1, set_test2
        ({'Devid', 'Mark'}, {'Good', 'Jack', 'Marish'})
        >>> set_test1 = {"Jack", "Mark", "Devid"}			 
        >>> set_test2 = {"Jack", "Marish", "Good"}	
        
        >>> set_test1 -= set_test2			 
        >>> set_test1			 
        {'Devid', 'Mark'}
        
      • set_test1 |= set_test2

        >>> set_test1 = {"Jack", "Mark", "Devid"}			 
        >>> set_test2 = {"Jack", "Marish", "Good"}
        >>> set_test1 |= set_test2			 
        >>> set_test1		
        

    子集与父集

    • issubset(self, *args, **kwargs)

      A.issubset(B) A是B的子集吗? 返回bool

      >>> set_test2 = {"Jack", "Marish", "Good"}
      >>> set_test1 = {"Jack"}
      >>> set_test2.issubset(set_test1)
      False
      >>> set_test1.issubset(set_test2)
      True
      
    • issuperset(self, *args, **kwargs)

      A.issuperset(B) A是B的父集吗? 返回bool

      >>> set_test2 = {"Jack", "Marish", "Good"}
      >>> set_test1 = {"Jack"}
      >>> set_test1.issuperset(set_test2)
      False
      >>> set_test2.issuperset(set_test1)			 
      True
      
    • isdisjoint(self, *args, **kwargs)

      返回True如果两个set没有交集

      >>> set_test1 = {"Jack", "Mark", "Devid"}		 
      >>> set_test2 = {"Ada", "Marish", "Good"}			 
      >>> set_test1.isdisjoint(set_test2)			 
      True
      
    • <,<= OR >,>=

      >>> set_test1 = {"Jack", "Mark", "Devid"}			 
      >>> set_test2 = {"Jack", "Mark"
      >>> set_test1 < set_test2			 
      False
      >>> set_test1 > set_test2			 
      True
      
  • 相关阅读:
    cogs 1682. [HAOI2014]贴海报 WW
    cogs 2039. 树的统计
    cogs luogu [NOIP2011] 选择客栈
    cogs luogu 1804. [NOIP2014]联合权值 WD
    cogs luogu [NOIP2014]生活大爆炸版石头剪刀布
    leetcode[119]Pascal's Triangle II
    leetcode[120]Triangle
    leetcode[121]Best Time to Buy and Sell Stock
    leetcode[122]Best Time to Buy and Sell Stock II
    leetcode[123]Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/MingleYuan/p/10628520.html
Copyright © 2011-2022 走看看