2-10 集合

1.如何找出同时买了iPhone7和iPhone8的人

   

  

2.集合

集合中的元素有三个特征:

1.确定性(元素必须可hash)
2.互异性(去重)
3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。
  • 注意:集合存在的意义就在于去重和关系运算

   

3.集合方法

# 查看所有方法
>>> dir(s)
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getatt
ribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len_
_', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__'
, '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', '
difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset
', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>>

# 方法的帮助
>>> help(s.clear)

Help on built-in function clear:

clear(...) method of builtins.set instance
    Remove all elements from this set.

  (1)创建

   

  (2)添加

  • 单个元素的增加 : add(),add的作用类似列表中的append
  • 对序列的增加 : update(),而update类似extend方法,update方法可以支持同时传入多个参数:

   

   

  (3)删除

    

  

4.集合测试

>>> iphone7
{'rain', 'jack', 'alex', 'tom'}
>>> iphone8
{'shanshan', 'jack', 'alex', 'tom'}

# 交集
>>> iphone7.intersection(iphone8)
{'jack', 'alex', 'tom'}
>>> iphone7 & iphone8
{'jack', 'alex', 'tom'}
>>>

#差集
>>> iphone7.difference(iphone8)
{'rain'}
>>> iphone7 - iphone8
{'rain'}
>>>
>>> iphone8.difference(iphone7)
{'shanshan'}
>>> iphone8 - iphone7
{'shanshan'}

#并集
>>> iphone7.union(iphone8)
{'rain', 'tom', 'shanshan', 'jack', 'alex'}
>>> iphone7 | iphone8
{'rain', 'tom', 'shanshan', 'jack', 'alex'}
>>>

# 对称差集
# 只买了iphone7 或者iphone8 的人
>>> iphone7.symmetric_difference(iphone8)
{'shanshan', 'rain'}
>>> iphone7 ^ iphone8
{'shanshan', 'rain'}
def difference_update(self, *args, **kwargs): # real signature unknown
        """ Remove all elements of another set from this set. """
        pass   

def intersection_update(self, *args, **kwargs): # real signature unknown
        """ Update a set with the intersection of itself and another. """
        pass

5.包含关系

in,not in:判断某元素是否在集合内
==,!=:判断两个集合是否相等

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

    • set.isdisjoint(s):判断两个集合是不是不相交
    • set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
    • set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

 

原文地址:https://www.cnblogs.com/venicid/p/8361979.html