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
    
posted @ 2019-03-30 19:03  Mingle_Yuan  阅读(205)  评论(0编辑  收藏  举报